1.自动装配
在XML配置文件中,可以通过Bean标签的property来指定,Spring容器中 Bean之间的依赖关系,如下:
<bean id="targetImplA" class="com.TargetImplA"></bean>
<bean id="sourceA" class="com.cn.SourceA">
<property name="target">
<ref bean="targetImplA"></ref>
</property>
</bean>
但是实际开发中,已经很少进行这样的依赖关系指定了,尤其是Spring boot等微服务开发渐成主流之后,我们越来越多的基于注解的方式来自动装配Bean之间的依赖关系。
自动装配概念(@Autowire注解的由来):Spring IOC容器掌握了容器中所有的Bean信息,通过Java的反射机制,是可以得到类的所有结构信息的,掌握了这些信息,Spring IOC容器就可以,根据一定的规则来自动指定Bean之间的依赖关系。
根据一定的规则,这里得规则主要有四种:
规则类型 | 说明 |
byName | 根据Bean名称自动匹配,如果这个Bean的成员变量和容器中一个Bean的名称一样,就自动把Bean的名称注入到字段中 |
byType | 根据Bean的类型来自动匹配。 |
constructor | Bean的构造函数有待注入的参数,则byType规则去注入。(针对构造函数注入而言) |
autodetect |
基于注解的方式,默认就是采用 byType 的自动装配规则的。
2. Bean作用域
我们不仅能够定义 Bean之间的依赖关系,还可以定义Bean的作用域。Bean有五种作用域,分别如下:
类型 | 说明 |
singleton | Spring IOC容器中仅存在此Bean的单实例。 |
prototype | 每次从IOC容器中获取的都是新的实例。 |
request | 一个http request请求中是单实例的,多request之间是不同实例。 |
session | 相同http session请求中是单实例的,不同session之间是不同实例。 |
globalSession | 相同全局session中是单实例,其余是不同实例。 |
通过 @Scope 注解指定当前Bean的作用域:
@Scope("prototype")
@Service
public class BussinessInfoServiceImpl implements BussinessInfoService