zoukankan      html  css  js  c++  java
  • Spring框架值注解

    注解配置概括

    Spring可以按指定的包路径扫描内部的组件,当发现组件类定义前有一下的注解标记,会将该组件纳入Spring容器中。
    1)@Component(其他组件)
    2)@Controller(Action组件,负责调Service)
    3)@Service(Service组件,负责调DAO,处理一些额外逻辑)
    4)@Repository(DAO组件,负责访问数据库)

    一,引出问题:

    当有很多bean需要加入到配置文件时,比如下面:

        <bean id="hbCostDAO" scope="singleton" lazy-init="true"
            init-method="myinit" destroy-method="mydestroy" class="cn.unis.dao.HbCostDAO"></bean>
        <bean id="mybatisCostDAO" scope="singleton" lazy-init="true"
            init-method="myinit" destroy-method="mydestroy" class="cn.unis.dao.MyBatisCostDAO"></bean>
        <bean id="jdbcCostDAO" scope="singleton" lazy-init="true"
            init-method="myinit" destroy-method="mydestroy" class="cn.unis.dao.JdbcCostDAO">
        </bean>

    随着越来越多的baen需要加入,那么这样会越来月不美观,所以,我们就引入了注解,使用注解只需要一句话

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

    这句话表示要注入cn.unis.dao下所有的bean。这就是注解。

    虽然在配置文件里简单了,相应的代价就是要在类中来说明哪些是注解。

    首先我们来看一些约定:(这里约定大于编码,也就是说都按照框架的约定,我们可以少很多coding)

    1,类名和变量名要规范,首字母大写,第二个字母必须小写,否则在使用时会出现冲突或无法识别

    2,将bean扫描进spring容器后,默认的bean对应的id就是类名首字母小写,如果需要自定义名字,可以在@注解("自定义名字")

    3,默认的scope是singleton,如果需要改变,可以使用@Scope("prototype")定义

    如果容器中两个符合要求可被注入同一个组件的Bean对象,可以采用下面注解标记:

    1)@Resource,默认按类型匹配注入(JDK自带的)。若有多个符合要求的类型,则报错:匹配不唯一,那么就需要采取按名称注入的方式,它的使用格式为:

                        @Resource(name="需要注入的Bean对象id值")。

    2)@Autowired,默认按类型匹配注入(Spring提供的)。若有多个符合要求的类型,则采取按名称注入的方式,它的使用格式为:

                        @Autowired

                        @Qualifier("需要注入的Bean对象id值")

     注意事项:注入标记在成员变量定义前,但@Resource也可以在set方法前使用!

    案例:id为hibernateCostDao的Bean对象和id为costDao的Bean对象,都符合CostDAO接口,在CostAction组件中注入,那么此时将会报错:匹配不唯一。解决如下:
    step1:修改CostActin,添加注入标记
    @Controller("costAction")
    @Scope("prototype")
    public class CostAction {
           //@Resource//将costDao注入,按类型匹配注入,JDK自带的
           //@Autowired//将costDao注入,按类型匹配注入,Spring提供的
           //@Resource(name="hibernateCostDao")//当有多个符合要求的类型,则按名称注入
           @Autowired
           @Qualifier("hibernateCostDao")//当有多个符合要求的类型,则按名称注入
           private CostDAO costDAO;
           public void setCostDAO(CostDAO costDAO) {   this.costDAO = costDAO;     }
  • 相关阅读:
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 画图(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 相邻数对(暴力)
    Java实现 蓝桥杯 算法训练 Cowboys
    Java实现 蓝桥杯 算法训练 Cowboys
    55. Jump Game
    54. Spiral Matrix
    50. Pow(x, n)
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6229935.html
Copyright © 2011-2022 走看看