基于注解的方式配置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的更多相关文章

  1. spring-第十七篇之spring AOP基于注解的零配置方式

    1.基于注解的零配置方式 Aspect允许使用注解定义切面.切入点和增强处理,spring框架可以识别并根据这些注解来生成AOP代理.spring只是用了和AspectJ 5一样的注解,但并没有使用A ...

  2. 缓存初解(五)---SpringMVC基于注解的缓存配置--web应用实例

    之前为大家介绍了如何使用spring注解来进行缓存配置 (EHCache 和 OSCache)的简单的例子,详见 Spring基于注解的缓存配置--EHCache AND OSCache 现在介绍一下 ...

  3. 缓存初解(三)---Spring3.0基于注解的缓存配置+Ehcache和OScache

    本文将构建一个普通工程来说明spring注解缓存的使用方式,关于如何在web应用中使用注解缓存,请参见: Spring基于注解的缓存配置--web应用实例 一.简介 在spring的modules包中 ...

  4. 8 -- 深入使用Spring -- 4...5 AOP代理:基于注解的“零配置”方式

    8.4.5 基于注解的“零配置”方式 AspectJ允许使用注解定义切面.切入点和增强处理,而Spring框架则可识别并根据这些注解来生成AOP代理.Spring只是使用了和AspectJ 5 一样的 ...

  5. 基于注解的方式管理Bean

    --------------------siwuxie095                                 基于注解的方式管理 Bean         (一)准备         ...

  6. 10 Spring框架--基于注解的IOC配置

    1.工程环境搭建 2.基于注解的IOC配置 IOC注解的分类 (1)用于创建对象的 他们的作用就和在XML配置文件中编写一个<bean>标签实现的功能是一样的@Component: 作用: ...

  7. Struts2基于注解的Action配置

    使用注解来配置Action的最大好处就是可以实现零配置,但是事务都是有利有弊的,使用方便,维护起来就没那么方便了. 要使用注解方式,我们必须添加一个额外包:struts2-convention-plu ...

  8. Spring IOC之基于注解的容器配置

    Spring配置中注解比XML更好吗?基于注解的配置的介绍提出的问题是否这种途径比XML更好.简单来说就是视情况而定. 长一点的答案是每一种方法都有自己的长处也不足,而且这个通常取决于开发者决定哪一种 ...

  9. Spring5参考指南:基于注解的容器配置

    文章目录 @Required @Autowired @primary @Qualifier 泛型 @Resource @PostConstruct和@PreDestroy Spring的容器配置可以有 ...

随机推荐

  1. Objective-C函数重载规则

    是按照函数标签是否重复来判断是否为一个重载函数的.

  2. UIScrollView 滚动视图—IOS开发

    转自:http://blog.csdn.net/iukey/article/details/7319314 UIScrollView 类负责所有基于 UIKit 的滚动操作. 一.创建 CGRect  ...

  3. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  4. Ubuntu 15.04 开启远程桌面

    1.安装Xrdp Windows远程桌面使用的是RDP协议,所以ubuntu上就要先安装Xrdp,终端命令行输入安装: sudo apt-get install xrdp vnc4server xba ...

  5. Tomcat Ajax跨域访问

    http://ibleave60.blog.51cto.com/2669415/1208652 http://enable-cors.org/server.html 下载cors-filter-1.7 ...

  6. AtomicReference与volatile的区别

    首先volatile是java中关键字用于修饰变量,AtomicReference是并发包java.util.concurrent.atomic下的类.首先volatile作用,当一个变量被定义为vo ...

  7. Supervisor重新加载配置启动新的进程

    一.添加好配置文件后 二.更新新的配置到supervisord supervisorctl update 三.重新启动配置中的所有程序 supervisorctl reload 四.启动某个进程(pr ...

  8. 大数据(13) - Spark的安装部署与简单使用

    一 .Spark概述 官网:http://spark.apache.org 1.        什么是spark Spark是一种快速.通用.可扩展的大数据分析引擎,2009年诞生于加州大学伯克利分校 ...

  9. 关于为空必填js判断

    为了减少一不必要的if逻辑判断,自已写了一个方法 $(function () { $("#btnAdd").click(function () { var strLinValu = ...

  10. 如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用

    如果输入参数采用“指针传递”,那么加 const 修饰可以防止意外地改动该指针,起 到保护作用. #include <iostream> /* run this program using ...