您的位置:首页 > 编程语言 > Java开发

[转]spring学习笔记7.自动装配(补充)

2011-08-29 16:14 253 查看

一、 自动装配autowire

含义:在bean注入时不需要我们来指定注入哪个具体的bean,而spring容器会根据我的使用autowire属性来确定自动装配功能。

autowire值:

1、 autodetect;

2、 byName:根据bean中成员属性的名称来自动装配

3、 byType:根据bean中成员属性的类型来自动装配。

4、 constaractor

5、 default:会根据<beans>标签中的default-autowire属性来进行自动装配的方式

6、 no(默认就是这个,需要手动指定注入那个bean)

(一) byName

根据bean中成员属性的名称来自动装配。

bean代码:

UserDaoImpl

public class UserDaoImpl implements UserDao {

private int daoId;

public int getDaoId() {return daoId;}

public void setDaoId(int daoId) {this.daoId = daoId; }

@Override

public String toString(){

return "daoId=" + this.daoId;

}}

UserService

public class UserService {

private UserDao userDao = new UserDaoImpl();

public UserDao getUserDao() {

return userDao;

}

public void setUserDao(UserDao userDao) {

this.userDao = userDao;

}

public void add(User u){

userDao.save(u);

}}

spring的配置文件

<bean id="userDao" class="com.wjt276.dao.impl.UserDaoImpl" >

<property name="daoId" value="1"></property>

</bean>

<bean id="userDao2" class="com.wjt276.dao.impl.UserDaoImpl" >

<property name="daoId" value="2"></property>

</bean>

<bean name="userService" class="com.wjt276.service.UserService" scope="prototype" autowire="byName">

</bean>

测试代码:

public void testAdd_4() throws Exception {

ApplicationContext factory = new ClassPathXmlApplicationContext("beans.xml");

UserService service = (UserService)factory.getBean("userService");

System.out.println(service.getUserDao());

}

结果:daoId=1

说明:因为在配置文件中配置了两个UserDaoImpl(名称分别:userDao、userDao2)和一个UserService类。而在userService的bean中并没有进行注入配置。而是使用了autowire属性指定了byName值,这样结果是正确的,是因为spring看到autowire=byName后,会在配置文件中查找bean的id与userService成员属性名称一至,然后将其注入,这样就完成了根据名称自动装配功能。

(二) byType

根据类型自动装配:就是spring在初始化时,会在配置文件中查找<bean>的类型与userService成员属性的类型相比较,类型一致的将其注入,这样就完成了根据类型自动装配。

(三) 注意

1、 自动装配使用并不多;

2、 只有在使用anntation注解时会使用的。

3、 byType如果出现相同类型在两个以上,就会出现异常。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: