Bean基于注解的配置

下面是一个使用注解定义一个DAO的Bean:

import org.springframework.stereotype.Component;

@Component("bookDao")
public class BookDao {
}

它相当于:

<bean id="bookDao" class="com.dao.bookDao" />

@Component可以被Spring容器识别,自动的将该pojo转换为容器管理的Bean.
除了@Component外,Spring还定义了三个功能和@Component一样的注解,分别对DAO,Service及Web层的Controller进行注解:

@Repository:用于对DAO实现类进行注解
@Service:用于对Service实现类进行注解
@Controller:用于对Controller实现类进行注解

这些虽然功能和@Component相同,但可以标识特定的bean,方便认出该bean的实际作用。

扫描注解定义的Bean

Spring提供了一个context命名空间,它提供了扫描类包以应用注解定义Bean的方式,如下代码:

<context:component-scan base-package="com.libiary.dao" />

Spring会扫描这个包下的所有类,并从注解中获取Bean的定义信息。

如果希望扫描特定的类,而不是整个包,那么可以使用resource-pattern属性过滤出特定的类:

<context:component-scan base-package="com.library" 
resource-pattern="books/*.class" />

这里将resource-pattern设置为books/*.class,Spring仅会扫描这个com.library.books子包中的类。

不过你可能需要更多的需求,比如仅需扫描实现某个特定类的类等。
这种可以通过context:component-scan及其过滤子类实现:

<context:component-scan base-package="com.smart">
        <context:include-filter type="regex" expression="com\.smart\.anno.*" />
        <context:exclude-filter type="aspectj" expression="com.smart..*Controller+" />
</context:component-scan>

context:include-filter 表示要包含的过滤类。
context:exclude-filter表示要排除的目标类。

可以有若干个context:exclude-filter和context:exclude-filter。这两个过滤元素支持多种类型的过滤表达式。
支持的类型如下:

1、type=annotation,如
org.springframework.stereotype.Component;
org.springframework.stereotype.Controller;
org.springframework.stereotype.Repository;
org.springframework.stereotype.Service;
将对目标类是否标注了某个注解进行过滤。

2、type=assignable,如com.library.XxxService。
表示所有继承或扩展XxxService的类,将对目标类是否继承或扩展了某个特定类进行过滤

3、type=aspectj,过滤器扫描与指定的AspectJ表达式所匹配的那些类。

4、type=regex,过滤器扫描类的名称指定的正则表达式所匹配的那些类。

5、type=custom,该类必须实现org.springframework.core.type.TypeFilter接口。

在所有这些过滤类型中,除了custom类型外,aspectj的过滤表达能力最强。

context:component-scan还有一个use-default-filters属性,默认是true,表示默认会对上面提到的四种注解都进行扫描。如果仅需要扫描@Controller的Bean,必须将这个属性设为false。

所以,context:component-scan先根据exclude-filter列出不需要扫描的,再通过include-filter列出需要扫描的,再根据use-default-filters的值是否扫描特定注解的类。

以上是bean的注解配置,以及扫描注解定义的Bean。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值