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;     }
  • 相关阅读:
    Vue项目中跨域问题解决
    子网掩码
    C++的const类成员函数
    在python3中使用urllib.request编写简单的网络爬虫
    Linux 重定向输出到多个文件中
    背包问题
    hdu-1272 小希的迷宫
    SQLAlchemy 几种查询方式总结
    pycharm快捷键、常用设置、配置管理
    python3判断字典、列表、元组为空以及字典是否存在某个key的方法
  • 原文地址:https://www.cnblogs.com/ningheshutong/p/6229935.html
Copyright © 2011-2022 走看看