Spring 框架基础知识(03)
1. 自动装配
Spring 可以将容器中存在的任何对象自动赋值到某个属性或参数中去!这样的机制就称之为“自动装配”!简单的说,当某个属性或参数需要值时,只要这个值是在 Spring 容器中,Spring 就可以为它自动赋值!
在需要被自动装配的属性之前添加@Autowired
注解,即表示“希望 Spring 为该属性自动的装配值”,例如:
当然,自动装配的前提是 Spring 容器中有合适的值!以上需要被装配的是UserDao
类型的属性,那就要求某个类是实现了UserDao
接口的,并且这个类是被 Spring 管理的(组件扫描+注解),例如:
Spring 框架在实现自动装配时,有 2 种装配模式:
byName
模式:根据名称实现自动装配,在这种模式下,要求被装配的属性的名称,与 Bean 的名称是完全一致的!byType
模式:根据类型实现自动装配,在这种模式下,要求被装配的属性,在 Spring 容器中存在类型匹配的对象,如果被装配的属性是声明为父级类型,则 Spring 容器存在子级类型的对象即可装配成功,如果被装配的属性是声明为接口类型,则 Spring 容器存在实现类的对象即可装配成功!注意:使用这种模式时,如果在 Spring 容器中匹配类型的对象超过 1 个,就会装配失败!
当使用@Autowired
注解时,其装配机制是:首先,会以byType
模式在 Spring 容器中查找匹配类型的对象的数量,如果为 0 个,会报告错误,例如:
如果有 1 个,则直接装配,无视名称是否匹配;
如果超过 1 个,会尝试通过byName
模式来装配,如果名称匹配成功,则实现装配,如果名称均不匹配,则报告错误,例如:
当然,不可以存在 2 个对象使用相同的名称,否则,会因为名称冲突而出现错误:
另外,还可以使用@Resource
注解来修饰被装配的属性,例如:
使用
@Resource
时,必须将环境改为 JDK 1.8,或添加 Tomcat 环境。
使用@Resource
时,其执行效果与@Autowired
是完全一致的!但是,其装配机制并不相同!@Resource
的装配机制是:先尝试byName
模式来装配,如果存在名称匹配的对象,则直接装配,如果不存在,则尝试byType
模式来装配。
2. Spring 阶段小结
【理解】Spring 框架的主要作用是:创建对象,管理对象;
【理解】使用 Spring 的好处在于:降低类与类之间的耦合度,改为依赖于接口,实现解耦;
【理解】Spring 框架通过 DI(Dependency Injection:依赖注入,通过 Spring 框架使得某个属性有值了)实现了 IoC(Inversion of Control:控制反转,通过注解或某些做法将对象的控制权交给了 Spring 框架);
【掌握】使用
@Bean
注解结合某个返回对象的方法,使得 Spring 框架管理相关的对象;【掌握】通过组件扫描(配置
@ComponentScan
注解的参数)和@Component
/@Controller
/@Service
/@Repository
注解,使得 Spring 框架管理类的对象;【了解】关于 Spring 管理的对象的作用域及生命周期;
【掌握】通过 Spring 框架读取**.properties**配置文件中的信息;
【掌握】通过
@Autowired
注解实现自动装配;【理解】Spring 的自动装配的机制,及
@Autowired
和@Resource
这 2 个自动装配的注解的装配机制的区别。【关于 Spring AOP】会在项目阶段的末期再讲。
版权声明: 本文为 InfoQ 作者【海拥(haiyong.site)】的原创文章。
原文链接:【http://xie.infoq.cn/article/ca5da4591ecc7fe1bb83c4229】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论