Bean的装配方式

Spring容器负责创建应用程序中的Bean,并通过依赖注入协调这些对象之间的关系。创建应用对象之间协作关系的行为通常成为装配。

基于XML的Bean装配

Spring提供了两种基于XML的装配方式:属性setter方法注入和构造方法注入。在Spring实例化Bean过程中,Spring首先会调用Bean的默认构造方法来实例化Bean对象,然后通过反射的方式调用setter方法来注入属性值。属性setter方法注入要求Bean必须满足两点:

  • Bean类必须提供一个默认的构造方法。
  • Bean类必须为需要注入的属性提供对应的setter方法。

在spring配置文件中,使用属性setter方法注入时,在<bean>元素的子元素<property>中为每个属性注入值;使用构造方法注入时,在<bean>元素的子元素<constructor-arg>中定义构造方法的参数,可使用其value属性或子元素来设置该参数的值。

<bean id = "adminInfo" class = "com.ssm.entity.AdminInfo">
<property name = "id value = "5"></property>
<constructor-arg name = "name" value = "admin"/> 
<constructor-arg name = "pwd" value = "123456"/> 
</bean>

基于Annotation的Bean装配

如果应用中bean数量较多,会导致xml配置文件过于臃肿,从而给维护和升级带来一定的困难。
Spring中定义了一系列的注解

  • @Component
    使用此注解描述Spring中的Bean,仅仅表示一个组件(Bean),可以作用在任何层次。使用时只需要将该注解标注在相应类上。

  • @Repository
    用于将数据访问层(DAO层)的类标识为Spring中的Bean

  • @Service
    用于将业务层(Service层)的类标识为Spring中的Bean

  • @Controller
    作用于控制层(如Spring MVC的Controller),用于将控制层的类标识为Spring中的Bean

  • @Autowired
    用于对Bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动配置工作。
    @Autowired注解默认按照Bean类型进行装配。
    @Autowired注解加上@Qualifier注解,可直接指定一个Bean实例名称来进行装配

  • @Resource
    作用相当于@Autowired,配置对应的注解处理器完成Bean的自动配置工作。

    区别:
    @Autowired默认按照Bean类型进行装配
    @Resource默认按照Bean实例名称进行装配

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

  • @Qualifier
    与@Autowired注解配合,将默认按Bean类型装配修改为按Bean实例名称进行装配,Bean的实例名称由@Qualifier注解的参数指定。

在实际开发中,通常使用@Repository标注数据访问层(DAO层),@Service标注业务逻辑层(Service层),@Controller标注控制器层(Controller层)

自动装配

Spring的<bean>元素中包含一个autowire属性,可通过设置autowire属性来自动装配Bean,就是将一个Bean注入到其他Bean的Property中。

autowire属性值:

  • default
    默认值,由<bean>的上级标签<beans>的default-autowire属性值确定。例如<beans default-autowire = "byname">,则该<bean>元素中的autowire属性对应的属性值就是byName。
  • byName
    根据Property的Name自动装配,如果一个Bean的name和另一个Bean中的property的name相同,则自动装配这个Bean到Property中。
  • byType
    根据Property的数据类型(TYPE)自动装配,如果一个Bean的数据类型和另一个Bean中的property的数据类型相同,则自动装配这个Bean到Property中。
  • constructor
    根据构造函数参数的数据类型,进行byType模式的自动装配。
  • autodetect
    如果发现默认的构造函数,用constructor模式,否则用byType模式
  • no
    默认情况下,不适用自动装配,Bean依赖必须通过ref元素定义。

对于大型的应用、不鼓励使用自动装配。虽然使用自动装配可减少配置文件的工作量,但大大降低了依赖关系的清晰性和透明性。依赖关系的装配依赖于源文件的属性名,导致Bean和Bean之间的耦合降低为代码层次,不利于高层次的解耦。

来源《SSM框架技术精讲与整合案例》

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值