7.4 使用注解实现自动装配
jdk1.5支持的注解 ,Spring2.5就支持注解了!
要使用注解须知:
1.导入约束 context约束
2.配置注解的支持<context:annotation-config/>【重点】
@Autowired
直接在属性上使用即可!(也可以在set方法上写)
如果在属性上写set方法都不需要了
xml:
实体类:
测试:
测试结果:
使用Autowired我们可以不用编写Set方法了,前提是你这个自动装配的属性在IOC(Spring)容器中存在,且符合名字byname!
科普:
@Nullable 字段标记了这个注解,说明这个字段可以为null;
如果xml中名称不一样:
测试结果:
仍然可以正常运行。
但是如果xml中我们有多个名不同类型相同的bean的时候:
我们的实体类会报错,这时候我们可以使用新的注解去指定我们配置中的bean
@ Qualifier(value)
就可以正常测试了。
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解【@Autowired】完成的时候,我们可以使用@Qualifier(value="xxx")去配合@Autowired的使用,指定一个唯一的bean对象注入!
@Resource
实体类:
bean.xml当类型一致时:
测试成功。
当名称符合时:
依然测试成功。
我们用Resource注解也可以指定装配
xml:
实体类:
运行成功。
小结:
@Resource和@Autowired的区别:
都是用来自动装配的,都可以放在属性字段上
@Autowired通过byType的方式实现,而且必须要求这个对象存在!【常用】
@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现!如果两个都找不到的情况下,就报错!【常用】
执行顺序不同:@Autowired通过byType的方式实现。@Resource默认通过byname的方式实现。
8.使用注解开发
在Spring4之后要使用注解开发必须要保证aop的包导入了
使用注解需要导入context约束,增加注解的支持!
1.bean
实体类:
xml:
测试:
2.属性如何注入
使用注解只需要更改实体类就行:
3.衍生的注解
@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!
dao[@Repository]
service[@Service]
controller[@Controller]
这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean
4.自动装配
@Autowired:自动装配通过类型,名字。
如果Autowired不能唯一自动装配上属性,则需要通过@Qualifier(value="xxx")
@Nullable 字段标记了这个注解,说明这个字段可以为null
@Resource :自动装配通过名字。类型。
5.作用域
@Scope(值)
6.小结
xml与注解:
xml更加万能,适用于任何场合!维护简单方便
注解 不是自己类使用不了,维护相对复杂!
xml与注解最佳实践:
xml用来管理bean;
注解只负责完成属性的注入;
我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持
9.使用JavaConfig实现配置
我们现在要完全不使用Spring的xml配置了,全权交给Java来做!
JavaConfig是Spring的一个子项目,在Spring4之后,他成为了一个核心功能!
例:
实体类:
我们这种方法完全不去使用xml文件了,用config去代替:
测试:
但是除此之外,我们也会遇到多个bean实体类的情况:
新的配置类:
用@Import引入
这种纯Java的配置方式,在SpringBoot中随处可见!