spring-DI

DI的细节实现

构造参数注入

将一个bean创建过程中构造方法需要的参数,通过Spring DI的方式,自动注入到构造方法中。

Setter注入

先通过一个无参的构造方法创建对象,然后通过属性的setter方法,将属性值注入到对象上。

支持注入的类型

  • 普通字面量

    • String
    • Integer(int)
    • Long(long)
    • Byte(byte)


    
    
    

  • 集和类型

    • List

      
      
          
              
                  简单类型值
                  内部bean
                  
              
          
      
      
    • Map

      
      
          
              
                  
                  
              
          
      
      
    • Set

      
      
          
              
              
                  简单类型值
                  内部bean
                  
              
          
      
      
    • java.util.Properties

      
      
          
              最擅长1V5
              一枪爆头
          
      
      
    • 注入空置、空字符串

      
          
      
      
      
      
      

自动装配

自动装配支持的策略
  • byType

    按照类型去IOC容器中找需要的bean,如果找到一个,则自动装配;如果没找到,不注入此属性;如果找到了多个匹配类型的bean,就会报错。

  • byName

    按照名称去IOC容器中找需要的bean,如果找到就自动注入;如果没找到,不注入此属性。

  • constructor

    工作原理和byType类似,也是按照类型去IOC容器中找对应的bean。不同的是注入的地方不是setter,而是构造方法的参数。

  • no (默认值)

    如果没有打开自动注入,默认Spring不会自动装配需要的属性。



XML方式的DI

构造参数注入

  • 常规写法

    
    
      
          
         
          
        
         
          
              
            
        
        ....
    
    
  • c命名空间简写

    
    
    

setter方式注入

setter注入能够注入的类型以及写法基本和构造参数注入时的写法一致,只不过将标签换成了

  • 常规用法

    
    
      
          
            
          
        
            
          
              
            
        
        ....
    
    
  • p命名空间简写

    
    
    

开启自动装配



提高自动装配时的权重



按类型自动装配时,不参与候选



注解方式的DI

  • 构造参数注入

    在构造方法上添加 @Autowired注解,构造方法的参数就会自动注入进来

  • setter方法注入

    方法有两种:

    1. 在属性的setter方法上添加@Autowired注解
    2. 在属性上添加@Autowired注解

提高自动装配时的权重

@Primary
@Component
public class Test {


}

public class Main {
    
    @Primary
    @Bean
    public void test() {
        return new Test();
    }
    
}

你可能感兴趣的:(spring-DI)