zoukankan      html  css  js  c++  java
  • Spring Bean的装配方式

    Spring容器负责创建应用程序中的Bean,并通过依赖注入协调这些对象之间的关系。创建应用对象之间协作关系的行为通常称为装配(wiring),这也是依赖注入(Dependentcy Injection)的本质。Bean的装配方式机Bean依赖注入。

    Spring容器支持多种形式的Bean装配方式,如基于XML的装配、基于注解(Annotation)的装配和自动装配。

    基于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" scope="prototype">
            <property name="id" value="5"></property>
            <constructor-arg name="name" value="admin" index="0"></constructor-arg>
            <constructor-arg name="pwd" value="123456" index="1"></constructor-arg>
        </bean>

    基于Annotation的Bean装配

    在Spring中尽管使用XML配置文件可以实现Bean的装配工作,但如果应用中Bean的数量较多,会导致XML配置文件过于臃肿,从而给维护与升级带来一定困难。

    从JDK5开始提供了名为Annotation(注解)的功能,Spring利用这一特性,逐步完善对Annotation技术的全面支持,使XML配置文件不再臃肿,向零配置迈进。

    Spring中定义了一系列的注解。如下所示:

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

    @Repository注解。用于将数据访问层(DAO层)的类标识在Spring中的Bean,其功能与@Component相同。

    @Service注解。通常作用 业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。

    @Controller注解。通常作用在控制层(如Spring MVC的Controller),用于将业务层的类标识为Spring中的Bean,其功能与@Component相同。

    @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类型进行装配,如果都无法匹配,则抛出NoSudhBeanDefinitionException异常。

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

    在上面几个注解中,虽然@Repository、@Service、@Controller的功能和@Component注解的功能相同,但为了使类的标注更加清晰,在实际开发中推荐使用@Repository标注数据访问层(DAO层),使用@Service标注业务逻辑层(Service层),使用@Controller标注控制层(Controller层)。

  • 相关阅读:
    Kafka设计解析(二)- Kafka High Availability (上)
    Kafka设计解析(三)- Kafka High Availability (下)
    Kafka深度解析
    Cloudera Manager(CDH5)内部结构、功能包括配置文件、目录位置等
    Failed to start /etc/rc.d/rc.local Compatibility
    Offset Management For Apache Kafka With Apache Spark Streaming
    maven-assembly-plugin打包可执行的jar包
    How Cigna Tuned Its Spark Streaming App for Real-time Processing with Apache Kafka
    SystemTap Beginners Guide
    数据可视化的开源方案: Superset vs Redash vs Metabase (二)
  • 原文地址:https://www.cnblogs.com/kjitboy/p/12076303.html
Copyright © 2011-2022 走看看