Spring详解依赖注入


一、Spring注入方式总结

1.属性setter注入(当前类需拥有无参构造方法)
  • name:当前类的属性名称

  • ref:注入类型为对象

  • value:注入类型为字符串或整型数值

属性注入

​ 🍕 特殊的注入形式:Inner beans 内部bean。声明于<property/>或<constructor-arg/>元素之间。
内部bean

​ 🍖 特殊的注入形式:使用P命名空间:

<!-- 首先加入命名空间配置 -->
xmlns:p="http://www.springframework.org/schema/p"
<bean id="dataServiceBean" class="com.apesource.service.DataService"
                               p:num="2" p:repository-ref="excelRepositoryBean">
</bean>

​ 🍗 list、set、map、props集合类型的注入:
集合类型的注入
2.构造器Constructor注入
  • value:注入类型为字符串或整型数值
  • ref:注入类型为对象
  • type:注入元素的类型
  • name:注入元素所对应的属性名称
  • index:注入元素在构造方法参数列表的下标位置
构造器注入
构造器注入
3.接口注入

二、Spring注入类型总结

  • value:字符串或整型数值
  • ref:对象
  • list、set、map、props集合,采用标签

三、Spring常用注解总结(注解名称,使用位置,作用)

  • @Autowired:按照类型自动注入。

    1.用于所要注入的组件属性的上方,可以省略setter方法。

    @Autowired
    private IRepository repository;
    

    2.用于setter方法上方

    @Autowired
    public void setRepository(IRepository repository) {
        this.repository = repository;
    }
    
  • @Qualifier:与Autowired搭配使用,按照名称自动注入

    @Autowired
    @Qualifier(value = "excelRepository")
    private IRepository repository;
    
  • @Resource:javax包下的注解,默认按照类型自动注入

    @Resource
    private IRepository repository;
    

    使用name属性按照名称注入

    @Resource(name = "fileRepository")
    private IRepository repository;
    
  • @Component:声明当前类为一个Spring Bean

  • @Controller:声明当前类为一个Spring Bean,同时具有控制层组件的身份

  • @Service:声明当前类为一个Spring Bean,同时具有业务层组件的身份

  • @Repository:声明当前类为一个Spring Bean,同时具有数据访问层组件的身份

  • @Primary:用于声明当前类为主要的Bean

  • @Configuration:用于声明当前类为Spring的配置类

  • @Bean:该注解用于标注创建bean的方法

  • @Scope:设置当前Bean的作用域

四、Spring Bean元数据的配置方式

1.基于XML
2.基于注解
3.基于JavaConfig配置类
// 该注解用于标注创建bean的方法
@Bean
public MaterialController materialControllerBean(){
    MaterialController materialController = new MaterialController();
    // 使用属性注入(属性注入业务层组件)
    materialController.setMaterialService(materialServiceBean());
    return materialController;
}
@Bean
public MaterialController materialControllerBean(){
    // 使用构造器注入
    return new MaterialController(materialServiceBean());
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。