基于注解的方式配置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. [Jobdu] 题目1373:整数中1出现的次数(从1到n整数中1出现的次数)

    题目描述: 亲们!!我们的外国友人YZ这几天总是睡不好,初中奥数里有一个题目一直困扰着他,特此他向JOBDU发来求助信,希望亲们能帮帮他.问题是:求出1~13的整数中1出现的次数,并算出100~130 ...

  2. atitit.激活一个窗口总结 swing java .net php

    atitit.激活一个窗口总结 1     激活窗口:鼠标激活vswindows消息激活 1.1      Web框架激活 2     退出激活窗口热键(dbg模式) 3     俩个窗口激活优先级 ...

  3. Altera Quartus II下载中途失败

    1.Altera 的quartus II 下载程序时中途失败,有可能是程序写的不对(缺少初始状态,else补全等等) 2.下载程序pof最好也用英文命名,再下载.

  4. 移动touch事件之一

    触摸事件分类: touchstart:当手指触摸屏幕时触发:即使已经有一个手指放在了屏幕上也会触发. touchmove:当手指在屏幕上滑动时连续的触发.在这个事件发生期间,调用preventDefa ...

  5. 基于CSS3 3D百叶窗图像过渡特效

    你可能已经在网上看到过不少使用jQuery制作的百叶窗效果,我们可不可以使用纯CSS来完成这项工作呢?答案是肯定的.我们不仅可以制作出这种百叶窗效果,还可以使它具有响应性. 在线预览   源码下载 要 ...

  6. hadoop onekey_step2

    #onekey_step2 # Rrogram: # 安装hadoop简易集群程序 # 使用说明 # History: # -- luoqi v0. release # email: # @qq.co ...

  7. [转][Python基础]Python中的Lambda表达式

    引用自:http://www.cnblogs.com/evening/archive/2012/03/29/2423554.html 在学习python的过程中,lambda的语法时常会使人感到困惑, ...

  8. selenium中WebElement.getText()为空解决方法

    当使用getText()获取一个普通的链接文本时: <a href="http://www.baidu.com">baidu</a> 如果得到的文本只为空, ...

  9. finals的使用

    //----------------------------------------Finals--------------------------- public class Finals { pu ...

  10. 特征根法求通项+广义Fibonacci数列找循环节 - HDU 5451 Best Solver

    Best Solver Problem's Link Mean: 给出x和M,求:(5+2√6)^(1+2x)的值.x<2^32,M<=46337. analyse: 这题需要用到高中的数 ...