spring-基于注解的配置
基于注解的配置
除了采用采用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-基于注解的配置的更多相关文章
- Spring 基于注解零配置开发
本文是转载文章,感觉比较好,如有侵权,请联系本人,我将及时删除. 原文网址:< Spring 基于注解零配置开发 > 一:搜索Bean 再也不用在XML文件里写什么配置信息了. Sprin ...
- (spring-第4回【IoC基础篇】)spring基于注解的配置
基于XML的bean属性配置:bean的定义信息与bean的实现类是分离的. 基于注解的配置:bean的定义信息是通过在bean实现类上标注注解实现. 也就是说,加了注解,相当于在XML中配置了,一样 ...
- Spring基于注解@Required配置
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- Spring 基于注解的配置 简介
基于注解的配置 从 Spring 2.5 开始就可以使用注解来配置依赖注入.而不是采用 XML 来描述一个 bean 连线,你可以使用相关类,方法或字段声明的注解,将 bean 配置移动到组件类本身. ...
- Spring基于注解的配置概述
以下内容引用自http://wiki.jikexueyuan.com/project/spring/annotation-based-configuration.html: 从Spring 2.5开始 ...
- java Spring 基于注解的配置(一)
注解引用:1.service.xml 配置注解模式 <?xml version="1.0" encoding="UTF-8"?> <beans ...
- Spring基于注解的配置1——@Required、@Autowired、@Qualifier示例及与传统注入方法的对比
@Required注释 作用:用于属性的set方法,那么这个属性必须在xml文件的bean标签里面进行配置,否则就会抛出一个BeanInitializationException异常. 首先准备一个类 ...
- Spring框架bean的配置(3):基于注解的配置
1.基于注解的配置: @Component: 基本注解, 标识了一个受 Spring 管理的组件 @Respository: 标识持久层组件 @Service: 标识服务层(业务层)组件 @Contr ...
- Spring IoC — 基于注解的配置
基于XML的配置,Bean定义信息和Bean实现类本身是分离的,而采用基于注解的配置方式时,Bean定义信息即通过在Bean实现类上标注注解实现. @Component:对类进行标注,Spring容器 ...
- 阶段3 2.Spring_08.面向切面编程 AOP_9 spring基于注解的AOP配置
复制依赖和改jar包方式 src下的都复制过来. 复制到新项目里了 bean.xml里面复制上面一行代码到下面.把aop改成context. 配置spring容器创建时要扫描的包 Service的配置 ...
随机推荐
- 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)
打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...
- Codeforces Round #316 (Div. 2) B Simple Game 贪心
贪心,如果m分成的两个区间长度不相等,那么选长的那个区间最接近m的位置,否则选m-1位置,特判一下n等于1的情况 #include<bits/stdc++.h> using namespa ...
- WPF中Canvas使用
首先知道Canvas有Left.Right.Top和Bottom这四个属性,放入Canvas的元素通过这四个属性来决定它们在Canvas里面的位置. 比如: Xaml: <Canvas Hori ...
- 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 分析如下: 首先通过语句 ...
- javaEE(12)_数据库连接池
一.直接获取数据库连接和通过池获取示意图: 二.编写数据库连接池 1.实现DataSource接口,并实现连接池功能的步骤: •在DataSource构造函数中批量创建与数据库的连接,并把创建的连接加 ...
- Fortran学习笔记4(循环语句)
Fortran学习笔记4 Fortran学习笔记4 逻辑运算 循环 Do语句 Do-While循环 循环控制 循环应用实例 逻辑运算 if命令需要和逻辑运算表达式搭配才能起到很好的效果.下面分别列出F ...
- kvm虚拟化存储管理
1. kvm虚拟化存储介绍 KVM 的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的.Storage Pool 是宿主机上可以看到的一片存储空间,可以是多种型: Vol ...
- Django ORM (一) 创建数据库和模型常用的字段类型参数及Field 重要参数介绍
创建一个 Django 项目及应用 django-admin startproject orm cd orm python manage.py startapp app01 在 models.py 上 ...
- python--FTP 上传视频示例
# 服务端 import json import socket import struct server = socket.socket() server.bind(('127.0.0.1',8001 ...
- ERROR! The server quit without updating PID file (/usr/local/var/mysql/bogon.pid).
本文转载自http://www.jb51.net/article/48625.htm 今天网站web页面提交内容到数据库,发现出错了,一直提交不了,数找了下原因,发现数据写不进去!第一反应,重启mys ...