自动装配,官方给出的定义是这样:
Spring IoC容器可以自动装配(autowire)相互协作bean之间的关联关系。因此,如果可能的话,可以自
动让Spring通过检查BeanFactory中的内容,来替我们指定bean的协作者(其他被依赖的bean)。由于
autowire可以针对单个bean进行设置,因此可以让有些bean使用autowire,有些bean不采用。autowire的
方便之处在减少或者消除属性或构造器参数的设置,这样可以给我们的配置文件减减肥
其实,自动装配就是让我们少些几个 <ref ="...">.
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-2.5.xsd">
<bean id="userDao" class="com.jimmy.dao.imp.UserOracleDao">
<property name="daoId" value="1"></property>
</bean>
<bean id="uuserDao2" class="com.jimmy.dao.imp.UserOracleDao">
<property name="daoId" value="2"></property>
</bean>
<bean id="userService" class="com.jimmy.service.UserService" autowire="byName">
</bean>
</beans>
Service类如下:
public class UserService {
private UserDao userDao;
public UserDao getUserDao() {
return userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void add(User u){
userDao.add(u);
}
}
测试类如下:
public class UserServiceTest {
@Test
public void testAdd(){
ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml");
UserService userService=(UserService)ctx.getBean("userService");
System.out.println(userService.getUserDao());
}
}
以上例子是通过按名字自动装配,UserService的属性值userDao会去配置文件里面找相同名字的bean,因此找到userDao,Spring会自动装配该bean。若找不到则报错。
若是按照类型匹配,则会根据userDao的类型去配置文件中寻找。