Bean的作用域
singleton 只有一个对象实例,注入一次,全局共享同一个对象实例,每次get都是同一个对象
prototype每次get都会实例化一个对象
Bean的自动装配
自动装配是Spring满足bean依赖的一种方式。
Spring会在上下文中自动寻找,并自动给bean装配属性。
Spring中有三种装配方式:
- xml中显示的配置
- java中显示的配置
- 隐式的自动装配bean**(重要)**
ByName自动装配
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cat" class="com.pyt.pojo.Cat"></bean>
<bean id="dog" class="com.pyt.pojo.Dog"></bean>
<!-- byName 会自动在容器上下文中查找和自己对象set方法后面的值对应的bean id-->
<bean id="person" class="com.pyt.pojo.Person" autowire="byName">
<property name="name" value="pyt"/>
<property name="age" value="18"/>
</bean>
</beans>
ByType自动装配
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="cat" class="com.pyt.pojo.Cat"></bean>
<bean id="dog" class="com.pyt.pojo.Dog"></bean>
<!-- byType 会自动在容器上下文中查找和自己对象属性类型相同的bean 但必须保证类型全局唯一-->
<bean id="person" class="com.pyt.pojo.Person" autowire="byType">
<property name="name" value="pyt"/>
<property name="age" value="18"/>
</bean>
</beans>
小结
- byName 需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法值一致。
- byType 需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致。