一、使用准备
1.1、导入约束 :context约束
1.2、配置注解的支持:context:annotation-config
沿用上一篇博客项目!
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!--开启注解支持-->
<context:annotation-config/>
<bean id="cat" class="com.massimo.pojo.Cat"/>
<bean id="dog" class="com.massimo.pojo.Dog"/>
<bean id="people" class="com.massimo.pojo.People"/>
</beans>
二、@Autowired
前提:完成上述准备工作!
实体类:
…
测试:
注意:
- @Autowired直接在属性上使用即可!也可以在set方法上使用!
- 使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC (Spring) 容器中存在,且符合名字byname!
拓展:
- @Nullable 字段标记了这个注解,说明这个字段可以为null;
- @Autowired的required属性,如果显示定义了Autowired的required属性为false,说明这个对象可以为null,否则不允许为空
public @interface Autowired {
boolean required() default true;
}
- 如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候、我们可以使用@Qualifier(value = “xxx”)去配置@Autowired的使用,指定一个唯一的bean对象注入!
三、@Resource
查找机制:先按名字查找,如果没有就按类型查找,如果都没有,则报错!
@Resource的name属性,作用,有多个bean时,可以通过name属性,指定一个唯一的bean对象注入!
四、小结
@Resource和@ Autowired的区别:
- 都是用来自动装配的,都可以放在属性字段上
- @ Autowired通过byType的方式实现,而且必须要求这个对象存在! 【常用】
- @ Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错! 【常用】
- 执行顺序不同: @Autowired通过byType的方式实现。@ Resource默认通过byname的方式实现。