基于注解的配置

除了采用采用xml来配置bean之外,也可以采用注解的方式来定义,注册,加载bean。

注解的方式在spring中默认时不开启的,所以需要在xml文件中进行配置启用

注解的启动方式有下面两种配置:

下面的配置既可以在所有类中启用注解

<context:annotation-config/>

还可以在部分你需要的类中启用注解,这个可以包含一些类,也可以不去扫描一些类

具体的在另外一篇博客事物管理中有讲到。

<context:component-scan base-package="com.b505.common.service.impl" />

 @Required  

应用于bean的setter方法,当在setter方法上加上这个注释后,表明必须在xml中配置这个属性,不然会抛BeanInitializationException异常

在beans.xml中配置启动注释的两个方式二选一,在本例中,都不配置的话,程序照样不会出错,这是因为这样就不会启用注解配置了

而是xml配置,

    <context:annotation-config/>
<!-- 这两个配置2选1 -->
<!-- <context:component-scan base-package="com.test.Student" /> -->
<bean id="student" class="com.test.Student">
<property name="name" value="zara"></property>
<property name="age" value="11"></property>
</bean>

Student.java实体类

public class Student {
private Integer age;
private String name;
@Required
public void setAge(Integer age) {
System.out.println("**setAge(Integer age) "+age);
this.age = age;
}
@Required
public void setName(String name) {
System.out.println("**setName(String name) "+name);
this.name = name;
}
 @Autowired

setter方法上的@Autowired

在setter方法上加上@Autowored注解后,spring容器会试图以“byType”的方式去连接bean

这中间就涉及到一个问题,若是我们在bean中有多个相同的type的bean,会报错的。

beans.xml

<context:annotation-config/>
<bean id="money1" class="com.test.Money1"></bean>
<bean id="student" class="com.test.Student">
<property name="name" value="zara"></property>
<property name="age" value="11"></property>
</bean>

Student.java

    @Autowired
public void setMoney(Money money) {
System.out.println("**setMoney(Money money) "+money);
this.money = money;
}

 在属性上面应用@Autowired

可以消除java代码中的setter方法,若是定义了setter方法,在注入bean时也不是通过这个setter方法的。

    @Autowired
private Money money;

在构造函数上使用@Autowired

    <context:annotation-config/>
<bean id="student" class="com.test.Student">
</bean>
<bean id="money2" class="com.test.Money2"></bean>

Student.java

    @Autowired
public Student(Money money){
System.out.println("***Student(Money money)");
this.money=money;
}
@qualifiler注释

beans.xml

在beans.xml中有两个类型相同的bean,money1和money2,当你需要注入时,就又能会不知道注入哪一个而抛异常,这时就用到@qualifiler注解了

    <context:annotation-config/>
<bean id="student" class="com.test.Student">
</bean>
<bean id="money1" class="com.test.Money1"></bean>
<bean id="money2" class="com.test.Money2"></bean>

Studen.java

这样指定了注入的bean为money2(id号)

    @Autowired
@Qualifier("money2")
public void setMoney(Money money) {
System.out.println("**setMoney(Money money) "+money);
this.money = money;
}
 spring Jsr-250注释

@Resource

他类似于遵循“by-name”的方式,找到id=“money2”的bean进行注入。

Student.java

    @Resource(name="money2")
public void setMoney(Money money) {
System.out.println("**setMoney(Money money) "+money);
this.money = money;
}

参考文章:w3cschool教程

spring-基于注解的配置的更多相关文章

  1. Spring 基于注解零配置开发

    本文是转载文章,感觉比较好,如有侵权,请联系本人,我将及时删除. 原文网址:< Spring 基于注解零配置开发 > 一:搜索Bean 再也不用在XML文件里写什么配置信息了. Sprin ...

  2. (spring-第4回【IoC基础篇】)spring基于注解的配置

    基于XML的bean属性配置:bean的定义信息与bean的实现类是分离的. 基于注解的配置:bean的定义信息是通过在bean实现类上标注注解实现. 也就是说,加了注解,相当于在XML中配置了,一样 ...

  3. Spring基于注解@Required配置

    基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...

  4. Spring 基于注解的配置 简介

    基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...

  5. Spring基于注解的配置概述

    以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration.html: 从Spring 2.5开始 ...

  6. java Spring 基于注解的配置(一)

    注解引用:1.service.xml 配置注解模式 <?xml version="1.0" encoding="UTF-8"?> <beans ...

  7. Spring基于注解的配置1——@Required、@Autowired、@Qualifier示例及与传统注入方法的对比

    @Required注释 作用:用于属性的set方法,那么这个属性必须在xml文件的bean标签里面进行配置,否则就会抛出一个BeanInitializationException异常. 首先准备一个类 ...

  8. Spring框架bean的配置(3):基于注解的配置

    1.基于注解的配置: @Component: 基本注解, 标识了一个受 Spring 管理的组件 @Respository: 标识持久层组件 @Service: 标识服务层(业务层)组件 @Contr ...

  9. Spring IoC — 基于注解的配置

    基于XML的配置,Bean定义信息和Bean实现类本身是分离的,而采用基于注解的配置方式时,Bean定义信息即通过在Bean实现类上标注注解实现. @Component:对类进行标注,Spring容器 ...

  10. 阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置

    复制依赖和改jar包方式 src下的都复制过来. 复制到新项目里了 bean.xml里面复制上面一行代码到下面.把aop改成context. 配置spring容器创建时要扫描的包 Service的配置 ...

随机推荐

  1. BC div2补题以及 复习模除 逆元__BestCoder Round #78 (div.2)

    第一题没话说 智商欠费 加老柴辅导终于过了 需要在意的是数据范围为2的63次方-1 三个数相加肯定爆了 四边形的定义 任意边小于其余三边之和 换句话说就是 最长边小于其余三边之和 这样的话问题转化为 ...

  2. mysql 存在更新,不存在插入

    String sql = "insert into wb_result " + "values(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,? ...

  3. vue实现微信分享朋友圈和朋友功能

    vue实现微信分享朋友圈和朋友功能 A-A+ haibao  2018-10-25  11  21  6.2 k  百度已收录  前端开发 温馨提示:本文共3536个字,读完预计9分钟. 这两天在开发 ...

  4. 92.背包问题(lintcode)

    注意j-A[i-1]必须大于等于0,只大于0会报错 class Solution { public: /** * @param m: An integer m denotes the size of ...

  5. OS X快捷键小技巧

    退出command+Q,关分页Command+W,刷新Command+R,新开分页Command+T 全屏 ctrl+command+F 每个Mac使用者都知道点击下窗口左上角黄色圆形的按钮就可以最小 ...

  6. nyoj-1103-区域赛系列一多边形划分

    http://acm.nyist.net/JudgeOnline/problem.php?pid=1103 区域赛系列一多边形划分 时间限制:1000 ms  |  内存限制:65535 KB 难度: ...

  7. 菜鸟教你如何通俗理解——>集群、负载均衡、分布式

    在“高并发,海量数据,分布式,NoSql,云计算......”概念满天飞的年代,相信不少朋友都听说过甚至常与人提起“集群,负载均衡”等,但不是所有人都有机会真正接触到这些技术,也不是所有人都真正理解了 ...

  8. 有C++特色的极乐净土

    闲的没事瞎打的 在win7下会走调,需要将win7的beep系统文件改成xp的,且主机装有蜂鸣器才能正常收听. beep文件的度盘地址(不过应该没人为了听个这个去改系统文件)(P.S.如果想要尝试,尽 ...

  9. NOIP 2017 D2T1 奶酪

    #include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #i ...

  10. 【Git版本控制】Git使用教程

    1.Git的综述 SVN是集中式版本控制系统,版本库集中放在中央服务器上,而干活时用的都是自己的电脑,所以首先要从中央服务器哪里得到最新的版本,然后干活,干完后,需要把自己做完的活推送到中央服务器.集 ...