- 使用@Value
- 基础数值
- 可以使用SpEL表达式“#{20-2}”
- 可以使用${};取出@PropertySource() 指定的属性文件值(即在运行环境变量的值)
自动装配;Spring利用依赖注入(DI),完成对IOC容器中中各个组件的依赖关系赋值;
-
@Autowired:自动注入:
-
默认优先按照类型去容器中找对应的组件:applicationContext.getBean(BookDao.class);
-
如果找到多个相同类型的组件,再将属性的名称作为组件的id去容器中查找applicationContext.getBean(“beanName”)
-
@Qualifier(“beanName”):使用@Qualifier指定需要装配的组件的id,而不是使用属性名|
-
自动装配:默认一定要将属性复制好,否则就会报错
@Autowired(required=false)设置为非必须,
-
@Primary:让Spring进行自动装配的时候,默认使用首选的bean;
也可以继续使用@Qualifier指定需要装配的bean的名字
BookService{
@Autowired
BookDao bookDao;
}
-
-
Spring还支持使用@Resource(JSR25e)和@Inject(JSR33e)[java规范的注解]
@Resource:可以和@Autowired一样实现自动装配功能;默认是按照组件名称进行装配的;没有能支持@Primary功能没有支持@Autowired(reqiured=false);
@Inject:需要导入javax.inject的包,和Autowired的功能一样。没有required=false的功能;
@Autowired:Spring定义的;@Resource、@Inject都是java规范
AutowiredAnnotationBeanPostProcessor:解析完成自动装配功能;
3)@Autowired:构造器,参数,方法,属性;都是从容器中获取参数组件的值
-
标注在方法位置:Spring容器创建当前对象,就会调用方法,完成方法的参数赋值;
@Bean标注的方法创建对象的时候,方法参数的值从容器中获取;@Bean+方法参数,默认不写@Autowired -
标注在构造器:默认加在ioc容器中的组件,容器启动会调用无参构造器创建对象,再进行初始化赋值等操作
如果组件只有一个有参构造器,这个有参构造器的@Autowired可以省略,参数位置的组件可以从Ioc容器中自动获取 -
标注在参数位置:
-
自定义组件想要使用Spring容器底层的一些组件(ApplicationContext,BeanFactory,xxx)
自定义组件需要实现xxxAware;在创建对象的时候,会调用接口规定的方法注入相关组件;Aware
把Spring底层一些组件注入到自定义的Bean中;
xxxAware:功能使用xxxProcessor实现的; ApplicationContextAware==》ApplicationContextAwareProcessor;
@Profile:指定组件在哪个环境的情况下才能被注册到容器中,不指定,任何环境下都能注册这个组件
- 加了环境标识的bean,只有这个环境被激活的时候才能注册到容器中。默认是default环境
- 写在配置类上,只有是指定的环境的时候,整个配置类里面的所有配置才能开始生效
- 没有标环境标识的bean,同时在类上也没有指定环境,在任何环境下都是加载的;
指定环境标识的方式:
-
使用命令行动态参数:在虚拟机参数位置加载-Dspring.profiles.active=test
-
代码的方式激活某种环境;
@Test public void testel(){ AnnotationConfigApplicationContext applicationContext= new AnnotationConfigApplicationcontext(); //1、创建一个applicationcontext //2、设置需要激活的环境 applicationContext.getEnvironment().setActiveProfiles("de"); //3、注册主配置类 applicationContext.register(MainConfigofProfile.class); //4、启动刷新容器 applicationContext.refresh(); ... }



