-
使用@value赋值
-
基本数值
-
可以写sp el #{}
-
可以写${}取出配置文件中的值即peoperties中的值
@Value("feifei") private String name; @Value("#{20-2}") private Integer age; @Value("${feifei.sex}") private String sex; 同时要在配置类中引入资源文件的位置 @PropertySource(value = {"classpath:test.properties"},encoding = "utf-8") 出现乱码问题,可以在引入资源文件时,声明encoding来处理
-
同样的在spring加载配置文件的时候同样的会把配置文件的属性加载进环境变量enviroment中,即从中也能获取属性值
-
Environment environment = context.getEnvironment();
String property = environment.getProperty("feifei.sex");
-
自动装配@Autowired
- spring利用DI即依赖注入,完成对ioc容器中各个组件的依赖关系的赋值
- 一个组件利用到另一个组件,默认优先按照类型去容器中寻找对应的组件,找到就赋值
- 如果该类型的组件在容器中有多个,就是用名字
- 也可以使用@Qualifier指定装配的组件的id,而不是使用默认的属性名字
- 如果容器中没有任何类型的该组件就会报错,自动装配默认一定要将属性赋值好
- @Autowired(required=false)就会再如果容器中没有任何类型的该组件就会默认为null而不是报错
-
@Primary 让spring进行自动装配时优先使用被注解备注的bean,此时还需要使用别的组件进行自动装配则同样使用@Qualifier
-
spring还支持@resource(jsr250)和@injet(jsr330)【java规范】
- @resource可以和@Autowired一样进行自动装配,但默认的按名称装配,也没有required的功能
-
@Autowired标注的位置属性 方法 构造器
- 标注在方法上,spring创建当前对象就会调用方法进行赋值,方法的参数,会从ioc容器中寻找
- 默认加载ioc容器中的组件,容器启动会调用无参构造器创建对象,在进行初始化赋值等的操作
- 标在构造器上,就会调用有参构造器,参数也是从ioc容器中获取组件的值,如果组件只有一个有参构造器,有参构造器的@Autowired 还是可以自动从容器中获取
-
自定义组件,想要使用spring容器底层的一些组件(applicationcontext、beanfactory)
- 自定义组件实现xxxaware,在创建对象的时候,会调用接口规定的方法注入相关组件
- 主要是aware接口,aware本意为感知到的、意识到的
@Component public class feifei implements BeanNameAware { private String name; public void setBeanName(String s) { this.name=s; } public String getName() { return name; } } 此时在容器中的bean就可以输出自己的bean的名字啦
- xxxaware:功能都是使用xxxprocessor
- 创建完bean之后发现bean实现了xxxaware接口就会给我们传进来,简单来说就是接口回调