【第十二章】零配置 之 12.3 注解实现Bean定义 ——跟我学spring3
前边介绍的Bean定义全是基于XML方式定义配置元数据,且在【12.2注解实现Bean依赖注入】一节中介绍了通过注解来减少配置数量,但并没有完全消除在XML配置文件中的Bean定义,因此有没有方式完全消除XML配置Bean定义呢?
?
Spring提供通过扫描类路径中的特殊注解类来自动注册Bean定义。同注解驱动事务一样需要开启自动扫描并注册Bean定义支持,使用方式如下(resources/chapter12/ componentDefinitionWithAnnotation.xml):
?
java代码:图12-1 Spring自带的@Component注解及扩展
?
?
图12-2 JSR-250中定义的@ManagedBean注解及自定义扩展
?
?
图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 写道楼主 辛苦了
确实很辛苦 都木有周末休息 哈哈哈
为人民服务


5 楼 wanglu271991027 2012-03-23 楼主 辛苦了 6 楼 jinnianshilongnian 2012-03-23 wanglu271991027 写道楼主 辛苦了