Bean的装配方式

Bean的装配可以理解为依赖关系注入,Bean的装配方式即Bean的依赖注入的方式。

Spring容器支持多种形式的Bean的装配方式,如基于XML的装配基于注解的装配自动装配等。其中最常用的是基于注解的装配。

基于XML的装配

Spring提供了两种基于XML的装配方式:设值注入构造注入

Spring实例化Bean的过程中,Spring首先会调用Bean的默认构造方法来实例化Bean对象,然后通过反射的方式调用setter方法来注入属性值。

设值注入:

  • Bean类必须提供一个默认的无参构造方法
  • Bean类必须为需要注入的属性提供对应的setter方法
  • 在配置文件中,需要使用 <property>元素为每个属性注入值

构造注入

  • Bean类必须提供有参构造方法
  • 在配置文件中,需要使用<constructor-arg>元素来定义构造方法的参数,也可以使用其value属性来设置该参数的值

基于注解的装配

Spring中定义了一系列的注解,常用的注解如下:

  • @Component:描述Spring中的Bean,可以作用在任何层次
  • @Repository:用于将持久层(Dao层)的类标识为Spring中的Bean
  • @Service:用于将业务层(Service层)的类标识为Spring中的Bean
  • @Controller:用于将控制层(Controller层)的类标识为Spring中的Bean
  • @Autowired:用于对Bean的属性变量、属性的setter方法以及构造方法进行标注,配合对应的注解处理器完成Bean的自动装配工作。默认按照Bean的类型进行装配
  • @Resource:其作用与@Autowired一样。其区别在于@Autowired默认Bean的类型装配,而@Resource默认按照Bean的实例名称进行装配

@Resource中有两个重要属性:nametype。Spring将name属性解析为Bean实例名称type属性解析为Bean实例类型。如果指定name属性,则按实例名称进行装配;如果指定type属性,则按Bean类型进行装配;如果都不指定,则先按Bean的实例名称装配,如果不能匹配,再按照Bean类型进行装配;如果都无法匹配,则抛出 NoSuchBeanDefinitionException异常。

  • @Qualifier:与@Autowired注解配合使用,会将默认的按Bean类型装配修改为Bean的实例名称装配,Bean的实例名称由 @Qualifier注解的参数指定
@Repository("accountDao")
public class AccountDaoImpl implements AccountDao {

}
@Service("accountService")
public class AccountServiceImpl implements AccountService {
  
     @Resource(name="accountDao")
     private AccountDao accountDao; 

}

此时,在配置文件中,Spring注解提供了另外一种高效的注解配置方式。

含义是:告知Spring在创建容器时要扫描的包(通知Spring扫描指定包下的所有Bean)


    <context:component-scan base-package="cn.itcast"></context:component-scan>

自动装配 

自动装配:将一个Bean自动地注入到其他Bean的Property中

Spring的 <bean>元素中包含一个 autowire 属性,我们可以通过设置 autowire 的属性值来自动装配Bean。

autowire属性的5个值:

  • default默认):由<beans>的default-autowire属性值来确定。
  • byName根据属性的名称自动装配。容器将根据名称查找与属性完全一致的Bean,并将其属性自动装配
  • byType根据属性的数据类型自动装配
  • constructor根据构造函数参数的数据类型,进行byType模式的自动装配
  • no:在默认情况下,不使用自动装配,Bean依赖必须通过ref元素定义

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值