Spring杂记之Bean自动检测与自动装配

本文详细介绍了Spring中的自动检测和自动装配机制,包括如何通过<context:component-scan>启用自动检测,以及使用@Component、@Controller、@Repository、@Service等注解标记组件。此外,还探讨了过滤组件扫描的策略。在自动装配部分,讨论了@Autowired、@Inject和@Resource三种注解的用法及其差异,特别提到了@Autowired的required属性和@Qualifier的选择性注入。

为了减少xml配置,Spring提供了自动检测与自动装配的方式。

自动检测

需要两步骤:
1. 在xml中,通过配置 < context:component-scan>来启用自动检测功能;
2. 在需要自动检测的Bean使用特殊的注解进行适当的标注,这些注解包括:

  • @Componnet:通用的构造性注解,标识该类为Spring组件
  • @Controller:标识将该类定义为Spring MVC controller
  • @Repository:标识将该类定义为数据仓库(dao)
  • @Service:标识将该类定义为服务
  • 使用@Component标注的任意自定义注解,事实上,@Controller,@Repository,@Service也是使用@Component标注的注解
过滤组件扫面

< context:component-scan>可以通过< context:include-filter>和< context:exclude-filter>两个子元素来调整扫描策略,这两个子元素包含一个type和expression的属性,描述如下:

过滤器属性描述
annotation扫描指定注解所标注的那些类
assignable扫描派生于expression属性指定类型的那些类
aspectj扫描与expression属性所指定的AspectJ表达式所匹配的那些类
custom使用自定义的org.springframework.core.type.TypeFilter实现类
regex扫描类的名称与expression属性所指定的正则表达式所匹配的那些类

自动装配

Spring支持几种不同的自动装配的注解:

  • Spring自带的@Autowired注解
  • JSR-330的@Inject注解
  • JSR-250的@Resource注解
@Autowired
  1. @Autowired可以标注CONSTRUCTOR,FIELD,METHOD,ANNOTATION_TYPE
  2. 默认情况下,使用@Autowired标注的属性或参数必须是可以装配的,如果没有,则会抛出NoSuchBeanDefinitionException,有多个Bean满足装配条件时也会抛出该异常;
  3. 当希望没有合适的Bean装配是,允许属性或参数为null,则可以使用@Autowired(required=false)来配置自动装配是可选的;
  4. 当有多个Bean满足装配条件时,可以通过@Qualifier(“”)来指定bean
  5. @Autowired是Spring特定依赖,不是标注的Java注解
  6. @Autowired默认是byType
@Inject
  1. @Inject可以标注CONSTRUCTOR,FIELD,METHOD
  2. @Inject没有类似@Autowired的required属性,因此@Inject标注的依赖关系必须存在,否则也会抛异常
  3. @Inject中可以配合@Named(“”)来标识可以选择的Bean
@Resource
  1. @Resource可以标注TYPE,FIELD,METHOD
  2. @Resource自带一个name的属性,可以通过@Resource(name=”“)来指定要注入的Bean
注解装配顺序可标注项
@AutowiredbyType构造器,属性,方法,注解
@InjectbyType构造器,属性,方法
@ResourcebyName->byType->byQualifier类/接口/注解/枚举,属性,方法

参考:《Spring实战 第3版》

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值