基于注解的形式配置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的容器配置可以有 ...
随机推荐
- Ubuntu 16.04下搭建kubernetes集群环境
简介 目前Kubernetes为Ubuntu提供的kube-up脚本,不支持15.10以及16.04这两个使用systemd作为init系统的版本. 这里详细介绍一下如何以非Docker方式在Ubun ...
- REST 和 SOAP、RPC 有何区别?
第一个问题:什么是RESTful? REST这个词,是Roy Thomas Fielding在他2000年的博士论文中提出的.有兴趣可以看看这里论文`,谁是Fielding?点击前面名字了解. 那RE ...
- ubuntu apt-get方式安装与卸载
在ubuntu终端中安装软件: 安装软件 apt-get install softname1 softname2 softname3……卸载软件 apt-get remove softname1 so ...
- BS Web窗体 动态修改WebConfig文件参数及数据库链接串
WebConfig操作帮助类 /// /// ConfigurationOperator 的摘要说明 /// public class ConfigurationOperator : IDisposa ...
- centos7下忘记mysql5.7密码
才装完的mysql,转眼密码就忘记了,找了一圈的修改密码方法,做下记录! 编辑mysql配置文件. [root@localhost ~]# vi /etc/my.cnf 在[mysqld]配置节下新增 ...
- linux命令之fuser
Usage: fuser [ -a | -s | -c ] [ -n SPACE ] [ -SIGNAL ] [ -kimuv ] NAME... [ - ] [ -n SPACE ] [ -SIGN ...
- c函数声明前加typedef是什么情况
刚才看到APUE(高级UNIX环境编程)里面的apue.h中有一行 typedef void Sigfunc(int); 没搞懂什么意思 其实就是定义一个函数指针类型,等价于 typedef void ...
- malloc,我误解你了
malloc用于动态申请内存,这个学过C语言的都知道.忘记了在哪本书上看到,malloc申请的内存不一定是连续,于是一直记住了.这句话有错吗?没有!但是当时只是记住了这个知识点,而没有深入的思考.直到 ...
- 纯CSS炫酷3D旋转立方体进度条特效
在网站制作中,提高用户体验度是一项非常重要的任务.一个创意设计不但能吸引用户的眼球,还能大大的提高用户的体验.在这篇文章中,我们将大胆的将前面所学的3D立方体和进度条结合起来,制作一款纯CSS3的3D ...
- 一款基于jQuery的全屏广告图片焦点图
之前为大家分享了很多jQuery焦点图插件.今天我们要介绍的这款jQuery全屏广告图片焦点图插件也非常不错,图片切换时有淡出淡出的动画效果,并且也相当流畅.效果图如下: 在线预览 源码下载 实现 ...