通过配置defalut—autowire属性,Spring IOC容器可以自动为程序注入Bean;默认是no(不启用自动装配)。
default—autowire的类型有:
byName:通过名称自动进行匹配
byType:通过属性自动进行匹配
示例如下:
一个实体类people
public class People{ private int id; private String name; private int age; private Dog dog; }
beans.xml配置:
<?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" default-autowire="byName"> <!-- byName通过属性名,byType通过类型只要类型与属性类型相同就可以自动装配 --> <bean id="dog" class="com.maya.model.Dog"> <property name="name" value="jack"></property> </bean> <bean id="dog1" class="com.maya.model.Dog"> <property name="name" value="tom"></property> </bean> <!-- 在这里不需要,手动进行注入bean,因为people中的属性名是dog,那么它会自动装配id是dog的类 --> <bean id="people1" class="com.maya.model.People"> <property name="id" value="1"></property> <property name="name" value="小明"></property> <property name="age" value="15"></property> </bean> </beans>
建议:自动装配机制慎用,它屏蔽了装配细节,容易产生潜在的错误;
方法注入:
Spring 管理的bean的作用域默认是单例的singleton; 但是可以通过配置prototype,实现多例;
那么就需要用到方法注入:lookup-method
如果我想让Spring管理的bean在我每次调用的时候都是新的,那么就需要如下配置(但是这样做的前提条件是:我没有手动将这条狗注入到people中)
<bean id="dog" class="com.maya.model.Dog" scope="prototype"><!-- 将scope属性设置为prototype --> <property name="name" value="jack"></property> </bean>
如果将dog手动注入到了people中的话,这样做是无法改变其单例的模式,依然会是同一条狗