[使用]-自动装配

自动装配

@Autowired

  • 可以标注在构造器、参数、方法、字段上。
  • 当bean只有一个有参构造器时,可以省略标注。
  • 在setter方法或者@Bean标注的方法参数,可以省略。
查找顺序
  1. 默认优先按照类型去容器中查找对应bean:applicationContext.getBean(BookDao.class);
  2. 如果找到多个相同bean,再将属性名作为bean的ID去容器中查找:applicationContext.getBean("bookDao");
使用
  1. 使用 @Qualifier("bookDao2") 明确指定要注入bean的ID(需要和@Autowired 配合使用);
  2. 自动装配默认一定要将属性赋值,没有找到就会报错;
    a. 可以使用 @Autowired(required=false) 调整。
  3. @Primary:让spring进行自动注入的时候,默认使用首选的bean;
    a. 也可以继续使用@Qualifier指定需要注入的bean的名字;

@Resource

JSR250 Java规范的注解。
默认按bean名称进行装配。
不支持 @Qualifier 、 @Primary、required=false 功能。

@Inject

JSR330 Java规范的注解。

使用的时候需要导入依赖:

<dependency>
    <groupId>javax.inject</groupId>
    <artifactId>javax.inject</artifactId>
    <version>1</version>
</dependency>

支持 @Qualifier 、 @Primary,但是不支持 required=false 功能。

Aware 注入spring 底层组件 & 原理

为什么需要 xxxAware?

用户自定义的bean 想要使用spring容器底层的一些bean(ApplicationContext, BeanFactory,xxx);

  1. 自定义bean实现 xxxAware;在创建对象时,会回调接口规定的方法,以注入相关 bean。
  2. xxxAware 功能———对应处理器——> xxxProcessor 。

Profile 环境定义

用途

spring提供的可以根据当前环境,动态激活和切换不同的组件的功能。

开发环境、测试环境、生产环境。

@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件。

标注位置

  1. 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境。
  2. 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效。
  3. 没有标注环境标识的bean在,任何环境下都是加载的。

激活方法

  1. 使用命令行动态参数: 在虚拟机参数位置加载
    -Dspring.profiles.active=test
  2. 代码的方式激活某种环境;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。