Spring学习Bean自动装配与注解开发
Posted yfyyy
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring学习Bean自动装配与注解开发相关的知识,希望对你有一定的参考价值。
七、Bean的自动装配
- 自动装配是Spring满足bean依赖的一种方式!
- Spring会在上下文中自动寻找bean,自动装备属性
在Spring中有三种自动装配方式
- 在xml中显示配置
- 在Java中显示配置
- 隐式的自动装配【重要】
7.1 测试
环境搭建:一个人两个宠物
7.2 ByName自动装配
<!--
ByName:会自动在容器上下文中查找,和自己对象set方法后面的值对应的beanid
-->
<bean id="people" class="cn.imut.pojo.People" autowire="byName">
<property name="name" value="张磊"/>
</bean>
7.3 ByType自动装配
byType:会自动在容器上下文中查找,和自己对象属性相同的对应的beanid
<bean id="people" class="cn.imut.pojo.People" autowire="byType">
<property name="name" value="张磊"/>
</bean>
小结:
- byname时,需要保证所有bean的id唯一,并且bean需要和自动注入属性set方法的值一致
- byname时,需要保证所有bean的id唯一,并且bean需要和自动注入属性类型一致
7.4 注解实现自动装配
The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML.
要使用注解须知:
导入约束:context
<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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
@Autowired:
直接在属性上使用即可,也可以在set方式上使用
可以不用写set方法,前提是在IOC容器中存在,且符合ByType
如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解完成时
@Nullable: 字段标记此注解,字段可以为null
使用@Qualifier配合使用
@Qualifier(value = "dog1")
@Resource
java自带注解,没有Spring方便
小结:
@Resource和@Autowired的区别:
- 都是用来自动装配,都可以放在属性字段上
- @Autowired 通过ByType的方式实现,必须要求对象存在,否则空指针
- @Resource默认通过ByName实现,若找不到名字,则通过ByType找
- 执行顺序不同:@Autowired 通过byType的方式实现。@Resource默认通过byname的方式实现
八、使用注解开发
在Spring4之后,要使用注解开发,必须要保证aop的包导入了
使用注解需要导入context约束,增加注解的支持
<?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
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd">
<context:annotation-config/>
</beans>
bean
属性如何注入
@Data @Component // @Component 组件 public class User { //相当于bean中的注入 @Value("张磊") public String name; }
衍生的注解
@Component有几个衍生注解,我们在Web开发中,会按照MVC三层架构分层
- dao @Repository
- service @Service
- controller @Controller
这四个功能是一样的,都代表将某个类注册到Spring容器中,装配Bean
自动装配
@Autowired:自动装配,通过类型 @Qualifier:配合使用,可以具体指定 @Nullable: 字段标记此注解,字段可以为null @Resource:自动装配
作用域
@Data @Component // @Component 组件 @Scope("singleton") //单例 public class User { //相当于bean中的注入 @Value("张磊") public String name; }
小结
xml与注解:
- xml更加万能,适用于任何场合!维护简单方便
- 注解 不是自己的类使用不了,维护相对复杂
最佳实践:
- xml用来管理bean
- 注解只负责完成属性的注入
以上是关于Spring学习Bean自动装配与注解开发的主要内容,如果未能解决你的问题,请参考以下文章
Spring学习bean装配详解之 通过注解装配 Bean基础配置方式
spring框架学习:Bean的装配方式 ——基于注解的装配自动装配