Day2 bean标签

bean标签

id

作用:唯一标识bean
用法:

name

作用:设置bean名称,可以设置多个,多个名称可以使用空格、逗号、或者分号分隔;
用法:

示例:
xml配置

测试代码:

    static void nameTest() {
        // 打印user的别名
        Arrays.asList(context.getAliases("user")).forEach(System.out::println);
        // 可以使用别名获取bean
        System.out.println(context.getBean("user") == context.getBean("user3"));
    }

结果:
user2
user5
user3
user4
false

class

作用:设置bean的class全限定类名;
用法:

scope

作用:设置bean的作用范围;
取值:

  1. singleton
    单例,默认值。即在当前Spring IOC容器中,只会出现该类的一个实例;
  2. prototype
    多例,每个依赖的地方,都注入一个新的实例;
  3. request
    每个HTTP请求(request),对应一个实例;
  4. session
    每个HTTP回话(session),对应一个实例;
  5. application
    每个servlet上下文(ServletContext),对应一个实例;
  6. websockt
    每个websockt对应一个实例;

    后面4个取值,只出现在web应用中。

用法:

示例:
xml配置

    
        
    
    
        
    
    
        
    

测试代码:

// 测试类
@Data
public class Counter {

    private int count;

    public void inc() {
        System.out.println(++this.count);
    }
}
@Data
public class CounterTest1 {

    private Counter counter;

    public void count() {
        this.counter.inc();
    }
}
@Data
public class CounterTest2 {

    private Counter counter;

    public void count() {
        this.counter.inc();
    }
}

// 测试代码
    static void scopeTest() {
        CounterTest1 counterTest1 = context.getBean(CounterTest1.class);
        counterTest1.count();
        counterTest1.count();
        CounterTest2 counterTest2 = context.getBean(CounterTest2.class);
        counterTest2.count();
        counterTest2.count();
    }

结果:
count: 1
count: 2
count: 1
count: 2

问题:singleton和prototype如何选择?
一般原则:对象无状态(或状态可共享)选singleton,有状态(状态不共享)选prototype。
例如上述示例代码:

  1. 如果每个CounterTestX都要单独计数,那么Counter应该设置为prototype;
  2. 如果所有CounterTestX可以共享Counter计数,那么Counter设置为单例即可;
扩展:单例模式

参照:https://www.cnblogs.com/cheng18/p/12055382.html

lazy-init

作用:设置单例bean实例化时间;
取值:

  1. false:默认值,在Spring IOC容器初始化是,实例化单例bean;
  2. true:将单例bean的实例化推迟到使用时;

    默认情况下,Spring会在初始化容器时,实例化所有单例bean;

用法:

bean注入

通过Spring实例化对象的成员变量。

构造函数

标签:
作用:设置构造参数
用法:
参数取值

  1. value:基本类型,如int,String等;
  2. ref:指向其他bean;
    参数匹配
  3. name

  
  
  
  1. index (从0开始)

  
  
  
  1. type

  
  
  

setter方法

标签:
用法:

  
    
    
    

注意:对应属性必须要有setter方法;

Autowiring 

用法:

好处:省去设置。

集合类型注入

Spring支持数组、List、Set、Map等集合类型的注入。

  1. 数组、List、Set
    标签:, , ,三者可以互换。
  2. Map
    标签:

示例:

    
        
        
        
        
            
                100
                110
                120
            
        
        
            
                1
                2
                3
            
        
        
            
                description111
                description222
            
        
        
            
                
                
            
        
    

p命名空间

作用:简化属性注入
示例:

       

注意:
使用p命名空间需要在beans标签中添加p命名空间: xmlns:p="http://www.springframework.org/schema/p"
完整写法:

可以利用idea帮我们自动添加。

你可能感兴趣的:(Day2 bean标签)