首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟小弟我学spring3

2012-08-15 
【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring312.3? 注解实现Bean定义12.3.1? 概述前边介绍

【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring3

12.3? 注解实现Bean定义12.3.1? 概述

前边介绍的Bean定义全是基于XML方式定义配置元数据,且在【12.2注解实现Bean依赖注入】一节中介绍了通过注解来减少配置数量,但并没有完全消除在XML配置文件中的Bean定义,因此有没有方式完全消除XML配置Bean定义呢?

?

Spring提供通过扫描类路径中的特殊注解类来自动注册Bean定义。同注解驱动事务一样需要开启自动扫描并注册Bean定义支持,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml):

?

java代码:

图12-1 Spring自带的@Component注解及扩展

?

?【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟小弟我学spring3

图12-2 JSR-250中定义的@ManagedBean注解及自定义扩展

?

?【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟小弟我学spring3

图12-3 JSR-330的@Named注解及自定义扩展

?

图12-2和图12-3中的自定义扩展部分是为了配合Spring自带的模式注解扩展自定义的,并不包含在Java EE 6规范中,在Java EE 6中相应的服务层、DAO层功能由EJB来完成。

?

在Java EE中有些注解运行放置在多个地方,如@Named允许放置在类型、字段、方法参数上等,因此一般情况下放置在类型上表示定义,放置在参数、方法等上边一般代表使用(如依赖注入等等)。

??12.3.2? Spring自带的@Component注解及扩展

一、@Component:定义Spring管理Bean使用方式如下:

?

java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
java代码:
    base-package表示扫描注解类的开始位置,即将在指定的包中扫描,其他包中的注解类将不被扫描,默认将扫描所有类路径;resource-pattern表示扫描注解类的后缀匹配模式,即“base-package+resource-pattern”将组成匹配模式用于匹配类路径中的组件,默认后缀为“**/*.class”,即指定包下的所有以.class结尾的类文件;name-generator:默认情况下的Bean标识符生成策略,默认是AnnotationBeanNameGenerator,其将生成以小写开头的类名(不包括包名);可以自定义自己的标识符生成策略;use-default-filters默认为true表示过滤@Component、@ManagedBean、@Named注解的类,如果改为false默认将不过滤这些默认的注解来定义Bean,即这些注解类不能被过滤到,即不能通过这些注解进行Bean定义;annotation-config表示是否自动支持注解实现Bean依赖注入,默认支持,如果设置为false,将关闭支持注解的依赖注入,需要通过<context:annotation-config/>开启。

    默认情况下将自动过滤@Component、@ManagedBean、@Named注解的类并将其注册为Spring管理Bean,可以通过在<context:component-scan>标签中指定自定义过滤器将过滤到匹配条件的类注册为Spring管理Bean,具体定义方式如下:

    ?

    java代码:
      <context:include-filter>表示过滤到的类将被注册为Spring管理Bean;<context:exclude-filter>表示过滤到的类将不被注册为Spring管理Bean,它比<context:include-filter>具有更高优先级;type表示过滤器类型,目前支持注解类型、类类型、正则表达式、aspectj表达式过滤器,当然也可以自定义自己的过滤器,实现org.springframework.core.type.filter.TypeFilter即可;expression表示过滤器表达式。

      ?

      一般情况下没必要进行自定义过滤,如果需要请参考如下示例:

      ?

      1、cn.javass.spring.chapter12.TestBean14自动注册为Spring管理Bean:

      ?

      java代码:

      ?

      2、把所有注解为org.aspectj.lang.annotation.Aspect自动注册为Spring管理Bean:

      ?

      java代码:
      java代码:

      ?

      ?

      4、将把匹配到aspectj表达式“cn.javass.spring.chapter12.TestBean3*”排除,不注册为Spring管理Bean:

      ?

      java代码:

      ?

      具体使用就要看项目需要了,如果以上都不满足需要请考虑使用自定义过滤器。

      ??12.3.6? 提供更多的配置元数据

      1、@Lazy定义Bean将延迟初始化,使用方式如下:

      ?

      java代码:
      java代码:
      java代码:
      java代码:
      java代码:
             5 楼    wanglu271991027    2012-03-23              楼主 辛苦了    6 楼    jinnianshilongnian    2012-03-23              wanglu271991027 写道楼主 辛苦了
      确实很辛苦 都木有周末休息 哈哈哈

      为人民服务

热点排行