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层)。

  • 相关阅读:
    Poj 1742 Coins(多重背包)
    Poj 2350 Above Average(精度控制)
    求二进制数中1的个数
    Poj 1659 Distance on Chessboard(国际象棋的走子规则)
    Poj 2411 Mondriaan's Dream(压缩矩阵DP)
    Poj 2136 Vertical Histogram(打印垂直直方图)
    Poj 1401 Factorial(计算N!尾数0的个数——质因数分解)
    poj 2390 Bank Interest(计算本利和)
    Poj 2533 Longest Ordered Subsequence(LIS)
    Poj 1887 Testing the CATCHER(LIS)
  • 原文地址:https://www.cnblogs.com/kjitboy/p/12076303.html
Copyright © 2011-2022 走看看