基于注解的形式配置Bean
基于注解的方式配置Bean:也就说我们在每个Bean的类名前面注解一下,Spring会自动帮我们扫描Bean放进IOC容器中
I基于注解的方式配置Bean(没有依赖关系的Bean)有两个步骤:
1组件扫描(component scanning):
Spring 能够从 classpath( 类路径下,也就是Src文件夹下)下自动扫描, 侦测和实例化具有特定注解的组件.
特定组件包括: @Component: 基本注解, 标识了一个受 Spring 管理的组件
@Respository: 建议标识在持久层组件(Model)
@Service: 建议标识在服务层(业务层)组件
@Controller: 建议标识在表现层组件(就是控制层) 对于扫描到的组件,
Spring 有默认的命名策略:使用非限定类名,第一个字母小写(UserService-->userService
也可以在注解中通过 value 属性值标识组件的名称 例如@Component("userService"),指定组件的名为userService
2在Spring配置文件里配置扫描组件<component-scan>
<component-scan>的属性:1base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类. 当需要扫描多个包时, 可以使用逗号分隔.
2resource-pattern: 属性指定扫描特定的类(可以使用通配符),
3user-default-Filter:指定是否使用默认的过滤器。默认为TRUE
<component-scan>的子节点:1<context:include-filter>(过滤器) 子节点表示要包含的目标类,与user-default-Filter配合使用
2<context:exclude-filter>(过滤器) 子节点表示要排除指定的目标类(也就是说指定的目标类将不被扫描)
具体实现步奏:
1导入Spring的AOP的jar包:spring-aop-4.0.0.RELEASE.jar
2在Bean的类名前面添加注解:
3在Spring的配置文件里配置扫描组件:<context:component-scan>
II基于注解的方式配置Bean(具有依赖关系的Bean)
实现原理:
实际上<context:component-scan> 元素还会自动注册 AutowiredAnnotationBeanPostProcessor 实例,
该实例可以自动装配具有 @Autowired 和 @Resource 、@Inject注解的属性.(就是利用这个特点装配依赖的Bean)
属性讲解
@Autowired 注解:1自动装配具有兼容类型的单个 Bean属性
2构造器, 普通字段(即使是非 public), 一切具有参数的方法都可以应用@Authwired 注解(自动去IOC容器去找,如果找到和注解类型兼容(相同)的Bean就自动加载).
3 当 Spring 找不到匹配的 Bean 装配属性时, 会抛出异常, 可以设置 @Authwired 注解的 required 属性为 false(required=falses时当IOC容器没有注解的Bean, 也一样运行。不抛异常)
4 默认情况下, 当 IOC 容器里存在多个类型兼容的 Bean 时, 通过类型的自动装配将无法工作. 此时可以在 @Qualifier 注解里提供 Bean 的名称.
5 @Authwired 注解也可以应用在数组类型的属性上, 此时 Spring 将会把所有匹配的 Bean 进行自动装配.
6@Authwired 注解也可以应用在集合属性上, 此时 Spring 读取该集合的类型信息, 然后自动装配所有与之兼容的 Bean.
7 @Authwired 注解用在 java.util.Map 上时, 若该 Map 的键值为 String, 那么 Spring 将自动装配与之 Map 值类型兼容的 Bean, 此时 Bean 的名称作为键值
@Resource :注解要求提供一个 Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称
@Inject :@Inject 和 @Autowired 注解一样也是按类型匹配注入的 Bean, 但没有 reqired 属性
所以一般建议使用@autowired
具体的实现流程:
1新建有依赖关系Bean
例如person依赖Eat,Eat依赖eatType
2在引用依赖Bean的前面添加@Authwired注解
例如person依赖Eat:
package control; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import model.Eat;
@Component
public class person {
@Autowired
private Eat eat; public Eat getEat() {
return eat;
} public void setEat(Eat eat) {
this.eat = eat;
}
public void showPerson() {
System.out.println("Person................");
eat.eat(this);
}
}
3配置扫描组件:<context:component-scan>(默认值扫描一个包的,若想扫描多个包,用逗号分隔开):代码示例
<context:component-scan base-package="view,control,model"></context:component-scan>
基于注解的形式配置Bean的更多相关文章
- spring-第十七篇之spring AOP基于注解的零配置方式
1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...
- 缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例
之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spring基于注解的缓存配置--EHCache AND OSCache 现在介绍一下 ...
- 缓存初解(三)---Spring3.0基于注解的缓存配置+Ehcache和OScache
本文将构建一个普通工程来说明spring注解缓存的使用方式,关于如何在web应用中使用注解缓存,请参见: Spring基于注解的缓存配置--web应用实例 一.简介 在spring的modules包中 ...
- 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式
8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...
- 基于注解的方式管理Bean
--------------------siwuxie095 基于注解的方式管理 Bean (一)准备 ...
- 10 Spring框架--基于注解的IOC配置
1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...
- Struts2基于注解的Action配置
使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...
- Spring IOC之基于注解的容器配置
Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...
- Spring5参考指南:基于注解的容器配置
文章目录 @Required @Autowired @primary @Qualifier 泛型 @Resource @PostConstruct和@PreDestroy Spring的容器配置可以有 ...
随机推荐
- 安装配置PhoneGap开发环境(二)——使用Cordova取代PhoneGap创建项目
1 Cordova是谁 PhoneGap的官方文档说的非常清楚.Cordova是PhoneGap的引擎,这两者的关系类似于WebKit与Chrome浏览器的关系.所以一些核心的基础操作对于Cordov ...
- json对象与json字符串互转方法
jQuery插件支持的转换方式: 复制代码 代码如下: $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 ...
- noj1475(递推题)统计多少个1
http://acm.nbut.cn/Problem/view.xhtml?id=1475 题意:给出一个数,需要你统计在这个数范围内有多少个1........ 思路:从高位到低位计算,例如1312 ...
- PowerPoint 2010 设置演讲者模式
- 针对16v554(ttyS0-15)的ttyAT0的login配置
1 ## /etc/inittab# console::sysinit:/etc/init.d/rcSconsole::respawn:/sbin/getty -L 115200 ttyAT0 vt1 ...
- 页面置换算 - FIFO、LFU、LRU
缓存算法(页面置换算法)-FIFO.LFU.LRU 在前一篇文章中通过leetcode的一道题目了解了LRU算法的具体设计思路,下面继续来探讨一下另外两种常见的Cache算法:FIFO.LFU 1 ...
- Latex之希腊字母表 花体字母 实数集
花体字母 \mathcal{x} 实数集字母 \mathbb{R} 转自:http://blog.csdn.net/lanchunhui/article/details/49819445 拉丁字母是2 ...
- cookie,Session机制的本质,跨应用程序的session共享
目录:一.术语session二.HTTP协议与状态保持三.理解cookie机制四.理解session机制五.理解javax.servlet.http.HttpSession六.HttpSession常 ...
- MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架
MyBatis是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架.MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBatis可以使用简单的XML或注解用 ...
- 测试RESTful API利器-Postman
对于前端开发者而言,最需要的往往不是技术本身,其实技术都没什么难的,而最缺少的则是各种各样好的兵器,比如调试,开发工具等等. 我们这里就推荐一款前端开发的利器-Postman,它是Google Chr ...