基于注解的形式配置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的容器配置可以有 ...
随机推荐
- Machine Learning—The k-means clustering algorithm
印象笔记同步分享:Machine Learning-The k-means clustering algorithm
- 集合运算 蓝桥杯 set容器
题目描述 给出两个整数集合A.B,求出他们的交集.并集以及B在A中的余集. 输入格式 第一行为一个整数n,表示集合A中的元素个数. 第二行有n个互不相同的用空格隔开的整数,表示集合A中的元素. 第三行 ...
- windows phone 应用提交商店失败总结
应用完成后,在提交微软商店时,可能因为各种各样的问题导致提交审核失败.以前的审核失败并没有总结,希望今后 把各种提交审核失败的情况总结一下,以减少今后提交认证时浪费时间. 1.商店的屏幕截图上不能包含 ...
- 0061 Spring MVC的数据格式化--Formatter--FormatterRegistrar--@DateTimeFormat--@NumberFormat
Converter只完成了数据类型的转换,却不负责输入输出数据的格式化工作,日期时间.货币等虽都以字符串形式存在,却有不同的格式. Spring格式化框架要解决的问题是:从格式化的数据中获取真正的数据 ...
- 复现IIS6.0远程命令执行漏洞
出这个漏洞有一定时间了,一直没测试,因为知道这个漏洞有条件的,好吧,顺便感谢royal大佬今天晚上日内网的指点. 漏洞要求: 开启Webdav PS:不想刚拿下的内网服务器一下权限掉了,又不想放xx远 ...
- tftp server setup
今天开始调试ARM的板子,要通过tftp下载到板子上,所以又要配置tftp服务器,真的烦死了… (本人酷爱装系统,所以经常都要搞配置) 因为之前已经在Ubuntu下搭建过很多次tftp服务器了,但是一 ...
- "crsctl check crs" command hangs at EVMD check
Pre-11gR2: "crsctl check crs" command hangs at EVMD check (文档 ID 1578875.1) APPLIES TO: ...
- 关于webRTC中video的使用实践
此次demo使用chrome49调试测试 前端在操作视频输入,音频输入,输出上一直是比较弱的,或者说很难进行相关的操作,经过我最近的一些研究发现,在PC上实际上是可以实现这一系列的功能的,其实现原理主 ...
- 【cf490】D. Chocolate(素数定理)
http://codeforces.com/contest/490/problem/D 好神的一题,不会做.. 其实就是将所有的质因子找出来,满足: 最终的所有质因子的乘积相等 但是我们只能操作质因子 ...
- Think Python: How to Think Like a Computer Scientist
Think Python: How to Think Like a Computer Scientist:http://greenteapress.com/thinkpython/html/index ...