013_Spring IoC学习笔记autowire介绍

autowire是指自动装配,之前的博文你发现,我们如果想注入,总得在bean下面配置property
<bean id="userService" class="com.jt.service.UserService">
<property name="userDAO" ref="u" />
</bean>

是不是觉得麻烦,其实spring的开发者也考虑到了这点,我们可以通过在bean里面配置autowire来完成自动装配,如下
<bean id="userService" class="com.jt.service.UserService" scope="prototype" autowire="byName" />

autowire有以下五种类型:
[list]
[*]no
[*]byName
[*]byType
[*]constructor
[*]autodetect
[/list]
1、no
表示不自动装配,这也是一种推荐方式,也是默认的方式,就是说,你必须添加property属性,虽然开发的工作量增加了,但程序更易读
2、byName
通过java类里面配置的name属性来装配,例如:
public class UserService {    
private UserDAO userDAO;
public void add(User user) {
userDAO.save(user);
}
public UserDAO getUserDAO() {
return userDAO;
}
public void setUserDAO(UserDAO userDAO) {
this.userDAO = userDAO;
}
}

这里的名字叫userDAO,那么spring就会用这个名字,在beans.xml文件中,找一个叫UserDAO的bean,如果没有找到,返回null
3、byType
通过属性来找,所以名字不重要了,只要是UserDAO的类型,就能被装配进去,但问题是,如果再beans.xml中有两个以上类型相同的bean,spring就傻了,一定不要让程序迷惑。例如下面的配置,就有问题。
<?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 name="userDAO" class="com.jt.dao.impl.UserDAOImpl">
<property name="daoId" value="1"></property>
</bean>
<bean name="userDAO2" class="com.jt.dao.impl.UserDAOImpl">
<property name="daoId" value="2"></property>
</bean>
<bean id="userService" class="com.jt.service.UserService" scope="prototype" autowire="byType"/>
</beans>

报的异常为:
org.springframework.beans.factory.NoSuchBeanDefinitionException
4、constructor
spring通过寻找构造方法来装配,如果你没有相应的构造方法,返回null,如果找到,按byType方式来装配,所以上面的问题还是存在
5、autodetect
通过byType或constructor来找,如果找不到,返回null,找到多个,报错

好了,说了这么多,实际中用哪个?一般哪个都不用,都是直接配置property ,而且需要指出一点,如果配置了property ,就能覆盖autowire的配置。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值