基于注解的配置

除了采用采用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. 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)

    打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...

  2. Codeforces Round #316 (Div. 2) B Simple Game 贪心

    贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...

  3. WPF中Canvas使用

    首先知道Canvas有Left.Right.Top和Bottom这四个属性,放入Canvas的元素通过这四个属性来决定它们在Canvas里面的位置. 比如: Xaml: <Canvas Hori ...

  4. Mysql插入中文时提示:ERROR 1366 (HY000): Incorrect string value: '\xE5\x8F\xB0\xE5\xBC\x8F...' fo

    Mysql插入数据时提示:ERROR 1366 (HY000): Incorrect string value: ‘\xE5\x8F\xB0\xE5\xBC\x8F…’ fo 分析如下: 首先通过语句 ...

  5. javaEE(12)_数据库连接池

    一.直接获取数据库连接和通过池获取示意图: 二.编写数据库连接池 1.实现DataSource接口,并实现连接池功能的步骤: •在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加 ...

  6. Fortran学习笔记4(循环语句)

    Fortran学习笔记4 Fortran学习笔记4 逻辑运算 循环 Do语句 Do-While循环 循环控制 循环应用实例 逻辑运算 if命令需要和逻辑运算表达式搭配才能起到很好的效果.下面分别列出F ...

  7. kvm虚拟化存储管理

    1. kvm虚拟化存储介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的.Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vol ...

  8. Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍

    创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上 ...

  9. python--FTP 上传视频示例

    # 服务端 import json import socket import struct server = socket.socket() server.bind(('127.0.0.1',8001 ...

  10. ERROR! The server quit without updating PID file (/usr/local/var/mysql/bogon.pid).

    本文转载自http://www.jb51.net/article/48625.htm 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写不进去!第一反应,重启mys ...