Spring源码解析_自动装配

1、自动装配:Spring利用依赖注入(DI),完成对IOC容器中更组件的依赖关系赋值

2、@Autowired(是spring的注解)

  • 自动注入,默认优先按照类型去容器中找对应的组件,找到就赋值
  • 如果找到多个类型相同的组件,再将属性的名称作为组件的id去容器查找
  • @Autowired(required = false):表示找不到springIOC中的bean,也可输出

3、@Qualifier("beanName"):可以直接指定使用的组件id

4、自动装配 默认 一定要将属性赋值好(即一定要将属性bean注入到springIOC容器中)

5、@Primary:让spring进行自动装配时,默认使用首选的bean,也可以使用@Qualifier("beanName")指定确定装配的bean

6、Spring还支持使用@Resource(JSR250)注解 和 @Inject(JSR330)注解,这两注解属于java规范:

  • @Resource:实现自动装配功能,默认按照组件名称进行装配
  • @Inject:

需要导入依赖 @Inject 注入功能和 @Autowired 一样,却没有require=false 的功能

  • 7、AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能的
  • 8、@Autowired 作用范围:构造器,参数,方法,属性

1、标注在方法位置:@Bean标注的方法创建对象时,方法参数的值从容器中获取(Car已经注册到容器中);默认不写@Autowired

/**
  *  Car已经注册到容器中
  *
  **/
@Bean
public Color color(Car car){
    return new Color ();
}

2、标注在构造器:如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件还是从spring容器中获取;
3、标注在参数位置
注意:默认加载ioc容器中的组件,容器启动会自动调用无参构造器创造对象,再进行初始化赋值操作。

9、@Profile

  • Spring 提供的可以根据当前环境,动态的激活和切换一系列bean(组件)的功能

  • 例子:数据源的切换
    Spring源码解析_自动装配_第1张图片
  • 获取.properties配置文件的三种方式

1、添加属性,在属性上添加@Value("${db.xxx}")

2、在方法的参数前添加 @Value("${db.xxx}")
3、实现 EmbeddedValueResolverAware接口,重写 setEmbeddedValueResolver()方法,在该方法中获取值进行处理

  • @Profile:指定组件在哪个环境情况下才能注册到容器中,不指定,任何环境均能注册组件

加了@Profile 环境标识的bean,只有环境被激活才能注册到容器中,默认是@Profile("default")

  • 如何激活 @Profile

1、 使用命令行动态参数:-Dspring.profiles.active = test

2、代码激活步骤:
<1>创建一个applicationContext对象
<2>设置需要激活的环境
<3>注册主配置类
<4>启动刷新

Spring源码解析_自动装配_第2张图片

你可能感兴趣的:(Spring源码解析_自动装配)