Spring框架讲解单例和多例

Spring框架讲解单例和多例,第1张

Spring框架讲解单例和多例 1.1单例和多例 1.1.1关于单例和多例说明 1.单例:内存只有一份 2.多例:在内存中有多份 1.1.2创建项目springdemo5_base

1.1.3关于单例多例的测试

规则1:Spring默认管理对象都是单例的

规则2:通过@Scope注解,控制对象单例/多例

 1.2懒加载机制 1.2.1懒加载说明

说明:如果Spring容器创建对象立即创建,则该加载方式为,立即加载         容器启动时创建

        如果Spring容器创建,对象在被使用的时候才加载 则称之为懒加载        用时才加载

注释:@Lazy 添加表示改为懒加载

测试说明: 主要测试对象中的无参构造什么时候执行

1.2.3多例与懒加载的关系

说明:只要对象是多例模式都是懒加载!!!!      ,在单例模式中控制懒汉式加载才"有效"

规则说明:

                lazy true                        lazy    false

         

单例模式:  有效                        有效  立即加载

多例模式:   无效 懒加载                无效 懒加载

1.2.4关于lazy使用场景的说明

场景1: 服务器启动时,如果加载太多的资源,则必然导致服务器启动慢,适当的将不重要的资源设置为懒加载

场景2: 有时用户需要一些特殊的链接,而这些链接的创建需要很长的时间,可以使用懒加载.

1.3Spring生命周期的管理

1.3.1关于生命周期的说明

说明:一个对象从创建到消亡,可以划分为四个阶段,如果需要对程序进行干预,则可以通过周期方法进行干预(回调函数/钩子函数/接口回调)

 四大阶段

图解说明生命周期

1.3.2生命周期函数方法的使用

@PostConstruct: 在对象创建之后立即调用

@PerDestroy: 对象消亡时 进行调用

 编辑配置类
package com.jt.config;

import com.jt.demo.User;
import org.springframework.context.annotation.*;

@Configuration//这是一个配置类标识
@ComponentScan("com.jt")
public class SpringConfig {
    @Bean
   // @Scope("singleton")//默认值,单例模式
   @Scope("prototype")//多例模式
    //@Lazy//懒加载
    public User user(){
        return new User();
    }
}
 编辑生命周期类
package com.jt.demo;

import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

@Component
public class Person {
    public Person(){
        System.out.println("SR出生了 智商拉曼");
    }
    @PostConstruct
    public void init(){
        System.out.println("SR长大了 骨骼精奇");
    }
    public void dowork(){
        System.out.println("SR迎娶WR");
    }
    @PreDestroy
    public void destory(){
        System.out.println("找一块风水宝地一起埋葬");
    }
}
 编辑测试类
@Test
    public void testdemo2(){
        //容器启动对象创建
        AnnotationConfigApplicationContext context =
                new AnnotationConfigApplicationContext(SpringConfig.class);
        //从容器中获取对象(要用)
      Person person = context.getBean(Person.class);
      person.dowork();
      context.close();
1.4 依赖注入(Dependency Injection,简称DI)

1.4.1创建结构

1.准备User类

2.准备Dog类

3.Cat类

说明:Dog和Cat向User类注入功能

1.4.2: 2@Autowired注解

说明:在对象中如果需要使用属性注入,一般使用@Autowired注解

功能: 可以将Spring容器中的对象,自动注入到属性中.

注入方式:

        1.默认按照类型注入, 如果注入的属性是接口,则自动注入实现类

        2.按照类型注入

重要的前提:如果需要依赖注入,则对象必须交给容器管理

编辑配置类
package com.jt.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration  //标识我是配置类
@ComponentScan("com.jt")//必须添加包路径
public class SpringConFig {
}
 编辑接口pet类
package com.jt.demo;

public interface pet {
    public void hello();

 编辑User类并加依赖注入@Auto
package com.jt.demo;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.stereotype.Component;

@Component//将User交给容器管理
public class User {
    @Autowired
    private pet pet;

    public void say(){
        //调用宠物的方法
        pet.hello();
    }
}
 编辑Cat类并实现pet接口
package com.jt.demo;

import org.springframework.stereotype.Component;

@Component
public class Cat implements pet{
    @Override
    public void hello() {
        System.out.println("小猫喵喵咪");
    }
}
1.5接口多实现的情况说明 1.5.1代码说明

说明:

 

1.5.2报错说明

说明:一个接口只有一个实现类,否则Spring程序无法选择

 

@Autowired
@Qualifier("cat")//该注解不能单独使用 如果要用必修须配合@Autowired一起使用,
// 根据key进行注入

1.6@Resource注解说明

一般不用 因为他是javax下的 我们只用Spring的

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5605680.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存