【转载】【学习】Spring 基于注解的配置
总结前置
当你想用类型匹配注入时,用@AutoWired,默认匹配类型,如果匹配多个,可用@Qualifier限制
当你想用名字匹配注入时,用@Resource+name属性
Spring 强烈推荐注解在构造器上,且对于不能为null的字段或者属性都用断言。
在Spring中,Spring默认不启用注解;使用注解配置,需要<context:annotation-config/>加入配置文件。
Spring 基于注解是用来减少配置量。但仍然是需要配置文件来启用注解能力。
<context:component-scan base-package="com.yl.spring.beans" resource-pattern="autowire/*.class"/>
上述注解包含: <context:annotation-config/> ,如果使用了上述的注解就可以不用<context:annotation-config/>。
context:component-scan 可以开启@Controller @Component @Repository @Service注解的扫描
<context:annotation-config/> 可以开启 @Required @AutoWired @Qualifier @Value(Spring自带的依赖注入注解), JSR-250, JSR-330注解的支持(Spring支持250,330标准注解)
Spring自带的依赖注解:
@Required:依赖检查
@Autowired:自动装配,用于替代基于XML配置的自动装配; 基于@Autowired的自动装配,默认是根据类型注入(如果需要根据名字来装配,则需要结合@Qualifier注解,此时不如用@Resource),可以用于构造器、字段、方法注入
@Value:注入SpEL表达式,用于注入SpEL表达式,可以放置在字段方法或参数上
@Qualifier: 限定描述符,用于细粒度选择候选者
@Scope:指定bean的范围,此作用于bean上,配合@Component @Controller @Service @Repository使用
JSR-250注解
1、 @Resource:自动装配,默认根据名字装配,如果指定name属性将根据名字装配,可以使用如下方式来指定
@Resource(name = "标识符")
字段或setter方法
如果没有指定name,则默认取字段名(字段上)或者取属性名(setter方法上)。注意:当根据名字找不到匹配的bean时就会按照类型装配,如果name一旦指定,则只会根据name匹配,找不到就报错。
2、 @PostConstruct和@PreDestroy:通过注解指定初始化和销毁方法定义
JSR-330注解:此无需关注,不常用以下注解
1 @Inject:等价于默认的@Autowired,只是没有required属性
2 @Named:指定Bean名字,对应于Spring自带@Qualifier中的缺省的根据Bean名字注入情况
3 @Qualifier:只对应于Spring自带@Qualifier中的扩展@Qualifier限定描述符注解,即只能扩展使用,没有value属性
@Resource 和 @AutoWired的区别:
http://stackoverflow.com/questions/4093504/resource-vs-autowired(Ichthyo和Andrew Tobilko回答的)
@AutoWired(或者@Inject)和@Resource作用基本一致,但是有一些概念上的区别。
@Resource 意思是根据name给我一个已知resource。这个name从setter方法或者字段上取值,或者直接指定。
@AutoWired 或者 @Inject 尝试装配一个合适的其他组件,根据类型。
因此,基本上这是俩个完全不同的概念。不幸的是@Resource的Spring实现有一个内置的失败回退,指当根据name查找失败时,Spring回退到使用@AutoWired的byType类型来装配。但这个是比较好用的,就是会让人疑惑。

浙公网安备 33010602011771号