• 11.18 Spring装配Bean


    11.18 Spring装配Bean

    本章内容

    • Bean自动装配

    • 基于注解装配Bean


    Bean自动装配

    概念:

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

    具体是指:

    Spring容器在不使用 <constructor-arg><property>标签的情况下,可以自动装配(autowire)相互协作的 Bean 之间的关联关系,将一个Bean注入其他BeanProperty中。

    Spring支持的装配Bean的方式:

    • 基于XMLBean装配

    • 基于AnnotationBean装配和自动装配等


    下面主要介绍基于annotationBean装配和自动装配

    • 使用自动装配需要配置<bean>元素的autowire属性。

    autowire属性的值:

    名称说明
    no 默认值,表示不使用自动装配,Bean 依赖必须通过 ref 元素定义。
    byName 根据 Property 的 name 自动装配,如果一个 Bean 的 name 和另一个 Bean 中的 Property 的 name 相同,则自动装配这个 Bean 到 Property 中。
    byType 根据 Property 的数据类型(Type)自动装配,如果一个 Bean 的数据类型兼容另一个 Bean 中 Property 的数据类型,则自动装配。
    constructor 类似于 byType,根据构造方法参数的数据类型,进行 byType 模式的自动装配。
    autodetect(3.0版本不支持) 如果 Bean 中有默认的构造方法,则用 constructor 模式,否则用 byType 模式。

    示例:

    • 使用之前的PersonManMainApp类作为基础

    • 修改Beans.xml配置文件实现自动装配

    不使用自动装配(autowire=no):

    Bean通过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-3.0.xsd">

       <bean id="man" class="com.bean.Man">
           <constructor-arg value="JunkingBoy" />
           <constructor-arg value="12" type="int" />
       </bean>

       <bean id="person" class="com.bean.Person" autowire="no">
           <constructor-arg ref="man" type="com.bean.Man" />
       </bean>
    </beans>

    按名称自动装配(autowire=byName):

    XML文件中Beanid必须与类中的属性名称相同:

    <bean id="man" class="com.bean.Man">
    <constructor-arg value="bean" />
       <constructor-arg value="12" type="int" />
    </bean>

    <bean id="person" class="com.bean.Person" autowire="byName" />

    注意:

    • 如果更改Bean的名称很可能会导致注入失败

    按类型自动装配(autowire="byType"):

    XML文件中Beanid与类中的属性名称可以不同,但必须只有一个类型的Bean

    <bean id="man1" class="com.bean.Man">
    <constructor-arg value="bean" />
       <constructor-arg value="12" type="int" />
    </bean>

    <bean id="person" class="com.bean.Person" autowire="byType" />

    构造函数自动装配(autowire="constructor"):

    类中构造函数的参数必须在配置文件中有相同的类型:

    <bean id="man" class="com.bean.Man">
    <constructor-arg value="bean" />
       <constructor-arg value="12" type="int" />
    </bean>

    <bean id="person" class="com.bean.Person" autowire="constructor" />

    基于注解装配Bean

    注意点:

    • Spring默认不适用注解装配Bean,需要在配置文件中添加<context:annotation-config />启用注解

    Spring中常用的注解
    • @Component:描述spring中的bean可以用在任何层次。只需要将注解标注在相应的类上即可

    • @Respository:将DAO层的类标识为spring中的bean。功能与component相同。

    • @Service:将Service层的类标识为spring中的bean

    • @Controller:将controller控制层的类标注为springbean

    • @Autowired:应用到bean的属性变量,属性的settergetter方法以及构造函数。配合对应的注解处理器完成Bean的自动配置工作。默认按照Bean的类型进行装配。

    • @Resource:作用与autowired相同。resource默认按照bean实例名称进行装配

      • name属性:解析为bean的实例名称,指定name属性,则按实例名称进行装配

      • type属性:解析为bean的实例类型,指定type属性,则按Bean类型进行装配

    如果属性都不指定则先按Bean实例名称装配,无法匹配再按Bean类型进行装配。都无法匹配抛出NoSuchBeanDefinitionException异常

    • @Qualifier:与autowired配合使用。默认的按Bean类型装配修改为按Bean的实例名称装配,Bean的实例名称由@Qualifier 注解的参数指定。

  • 相关阅读:
    P3990 [SHOI2013]超级跳马
    P4279 [SHOI2008]小约翰的游戏
    zabbix、agent端服务器图形化展示
    zabbix_agent代理端监控FTP服务
    hadoop SecondNamenode详解
    HADOOP_SECURE_DN_USER has been replaced by HDFS_DATANODE_SECURE_USER
    Linux netstat命令详解(检验本机各端口的网络连接情况)
    查看监听端口命令
    Hadoop服务的端口50070无法访问的问题
    Linux-centos6.8下关闭防火墙
  • 原文地址:https://www.cnblogs.com/JunkingBoy/p/15819322.html
Copyright © 2020-2023  润新知