Spring IoC容器之类路径扫描及组件管理

通过类扫描路径的方式来隐式检测候选组件,候选组件是匹配过滤条件的类库,并有在容器中注册对应bean的定义。开发者可以使用注解、AspectJ风格的表达式、自定义的过滤条件来选择哪些类有在容器中注册bean。

1、@Component及其同义的注解

spring2.5引入了更多典型注解,如@Component、@Repository、@Service、@Controller等。@Component注解是对受spring过滤组件的通用注解。@Repository、@Service、@Controller注解分别对应持久层、服务层和表现层。可以使用@Component注解自己的组件类,若使用@Repository、@Service、@Controller来替代,则这些类更适合由工具来处理或与切面进行关联。

2、元注解

元注解就是能被应用到另一个注解上的注解。

元注解可以被用于创建组合注解,如springMVC中的@RestController就是@Controller和@ResponseBody。组合注解可能从元注解中任意重新声明属性来允许用户自定义。如下是一个自定义的@Scope注解,将作用域名称指定到@Session注解上,也允许自定义proxyMode。

SessionScope定义
@SessionScope可以不声明proxyMode就使用  
为proxyMode重载一个值

3、自动检测类并注册bean定义

spring可以自动检测类并在ApplicationContext中注册对应的BeanDefinition。示例如下:

要自动检测这些类并注册对应的bean,需要添加@ComponentScan到@Configuration类上,其中的base-package元素是这两个类的公共父类包,可以任意选择使用逗号、分号、空格分隔的列表将每个类引入父包。示例如下:

或者使用XML配置:

<context:component-scan>隐式的开启了<context:annotation-config>功能,因此无需再使用<context:annotation-config>。

4、使用过滤器来自定义扫描

默认情况下@Component、@Repository、@Service、@Controller注解,或使用进行自定义的@Component注解的类本身仅用于检测候选组件,开发者可以修改并扩展这种行为,只需应用自定义的过滤器,即在@ComponentScan注解中添加include-filter或exclude-filter参数即可。每个过滤器元素需要type和expression属性。

过滤器选项及描述
使用Stub库来代替Repository注解
使用XML方式来配置

JSR-330规范注解

JSR-330是Java依赖注入的标准规范,从spring3.0开始支持。

\bullet @Inject

@javax.inject.Inject可以代替@Autowired注解,和@Autowired一样,它可以在字段、方法或构造器参数级别使用,示例如下:

import javax.inject.Inject;

public class TestBean {

    private MessageServiceservice;

    @Inject

    public void setService(MessageService service) {this.service = service;}

}

\bullet @Named和@ManagedBean

@javax.inject.Named和javax.annotation.ManagedBean可以代替@Component。示例如下:

import javax.inject.Named;

import javax.inject.Inject;

@Named("testBean") //等同于@ManagedBean("testBean")

public class TestBean {

    private MessageServiceservice;

    @Inject

    public void setService(MessageService service) {this.service = service;}

}

当使用@javax.inject.Named和javax.annotation.ManagedBean注解时,可以与使用spring注解相同的方式使用组件扫描。

@Configuration

@ComponentScan(basePackages ="com.xlws")

public class AppConfig {}


--参考文献《Srping5开发大全》

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容

  • [TOC] Spring配置方案 (不仅仅是Ioc的配置)从前文容器的具体实现已经知道,配置容器或者说配置应用上下...
    0x70e8阅读 428评论 0 0
  • 1.@Component和相关的注解 Spring提供了很多类似的注解,包括@Component, @Servic...
    Mrsunup阅读 807评论 0 0
  • 本来是准备看一看Spring源码的。然后在知乎上看到来一个帖子,说有一群**自己连Spring官方文档都没有完全读...
    此鱼不得水阅读 6,930评论 4 21
  • 转 Spring****基于 Annotation 的简单介绍 2011年03月29日 15:07:00 阅读数:...
    fd649cf896c0阅读 344评论 1 0
  • 概述 Spring是什么? Spring是一个开源框架,为了解决企业应用开发的复杂性而创建的,但是现在已经不止于企...
    琅筑阅读 1,162评论 2 8