注解配置概括

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; }

Spring框架值注解的更多相关文章

  1. 跟着刚哥学习Spring框架--通过注解方式配置Bean(四)

    组件扫描:Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件. 特定组件包括: 1.@Component:基本注解,识别一个受Spring管理的组件 2.@Resposit ...

  2. 10 Spring框架--基于注解和xml的配置的应用案例

    1.项目结构 2.基于xml配置的项目 <1>账户的业务层接口及其实现类 IAccountService.java package lucky.service; import lucky. ...

  3. 10 Spring框架--基于注解的IOC配置

    1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...

  4. Spring框架 IOC注解

    Spring框架的IOC之注解方式的快速入门        1. 步骤一:导入注解开发所有需要的jar包        * 引入IOC容器必须的6个jar包        * 多引入一个:Spring ...

  5. Spring框架 全注解annotation不使用配置文件(SpringConfiguration.java类代替) 补充 xml配置文件没有提示解决

    全注解不使用配置文件 首先还是倒包 在原有的jar包: 需Spring压缩包中的四个核心JAR包 beans .context.core 和expression 下载地址: https://pan.b ...

  6. spring框架半自动注解

    为了简便我们的开发,让我们一起来学习半自动注解吧. 让Spring管理某些类 1.在需要被SpringIOC容器管理的类上打上相应的注解 @Component:任意组件 @Controller:控制层 ...

  7. 十九、Spring框架(注解方式测试)

    一.注解方式测试 1.注解方式测试使用junit.使用junit-4.12.jar和hamcrest-all-1.3.jar(单元测试包) 把这两个jar包,导入到lib文件夹下. 2.TestSpr ...

  8. Java#Spring框架下注解解析

    @Bean 定义Bean @Bean是一个方法级别上的注解,主要用在@Configuration注解的类里,也可以用在@Component注解的类里.添加的bean的id为方法名 @Configura ...

  9. spring框架 事务 注解配置方式

    user=LF password=LF jdbcUrl=jdbc:oracle:thin:@localhost:1521:orcl driverClass=oracle.jdbc.driver.Ora ...

随机推荐

  1. ASP.NET MVC 5调用其他Action

    引用代码: @Html.Action("Index", "BaseData", new { d = "variety" }) 后台获取参数: ...

  2. Java进击C#——应用开发之Asp.net MVC

    本章简言 上一章笔者讲到关于Asp.NET的知识点.了解Asp.NET基本的知识点之后,我们在来学习关于C#的MVC框架就简单多了.显然本章就是来介绍一下关于Asp.NET MVC.对于MVC的思想笔 ...

  3. PyQt4入门学习笔记(五)

    PyQt4里的对话框 对话框是大多数GUI应用中不可分割的一部分.一个对话框是两者或多者的会话.在GUI内,对话框是应用向人说话的方式.一个对话框可以用来输入数据,修改数据,改变应用设置等等. QtG ...

  4. VS2015突然报错————Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with value 'Microsoft.AspNet.Mvc.Razor.TagHelpers.UrlResolutionTagHelper

    Encountered an unexpected error when attempting to resolve tag helper directive '@addTagHelper' with ...

  5. MySQL的简单使用和JDBC示例

    MySql是关系型数据库管理系统(RDBMS),所谓的"关系型"可以把它当作是"表格"概念,事实上,一个关系型数据库由一个或数个表格组成. MySQL所使用的S ...

  6. pandas.DataFrame对行和列求和及添加新行和列

    导入模块: from pandas import DataFrame import pandas as pd import numpy as np 生成DataFrame数据 df = DataFra ...

  7. 来玩Play框架06 用户验证

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 用户验证(User Authentification)复合的使用Play框架的数个 ...

  8. VMware安装CentOS时,无法以图形界面安装解决办法

    有的同学问: 用虚拟机软件(vmware.VirtualBox)安装CentOS系统时, 安装过程中没有中文,也没有出现图形界面,都是以命令行方式去安装, 有时候又会出现图形界面,不知道哪里配置的问题 ...

  9. Java Business Process Management(业务流程管理) 初识环境搭建

    一.简介 (一)什么是jbpm JBPM,全称是Java Business Process Management(业务流程管理),它是覆盖了业务流程管理.工作流.服务协作等领域的一个开源的.灵活的.易 ...

  10. CSS3之3d变换与关键帧

    3d变换是在transform基础上实现的 transform-style:preserve-3d; 建立3d空间 perspective:; 景深(设置用户看的距离) perspective-ori ...