reference:
http://www.ibm.com/developerworks/cn/java/j-lo-spring25-ioc/
http://leiwuluan.iteye.com/blog/607373
http://www.chinasb.org/archives/2011/06/2443.shtml
@Autowired 与@Resource的区别:
1、 @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
2、 @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
1 | @Autowired() @Qualifier("baseDao") |
2 | private BaseDao baseDao; |
-如果我们定义了name那么spring 就使用byName 方式注入
-如果我们定义了type 那么spring 就用byTyte方式注入
如 : @Resource(name = "office1") //自动注入bean Name= “office1” 的bean
private Office office;
1. @Autowired
1) 对变量@Autowired,可以去掉setter()
2) @Autowired 默认是byType,所有有多个相同的bean 时,会出问题,要搭配@Qualifier
3) 它可以注释到变量,方法 以及 构造函数
4) 如果我们在spring 中配置了多个相同的类型时,而我们的注释又同时是通过byType时,那么spring 就会出错,它不知道哪个bean 是它要的。
可以将@Qualifier 和@Autowired 一起用 ; @Qualifier 只能和@Autowired结合使用,是对@Autowired有益的补充。一般来讲,@Qualifier对方法签名中入参进行注释会降低代码的可读性,而对成员变量注释则相对好一些。
2. JSR-250注释@Resource、@PostConstruct 以及 @PreDestroy
@Resource 的作用相当于
@Autowired,只不过
@Autowired 按 byType 自动注入,面
@Resource 默认按 byName 自动注入罢了
name spring 将它解释成bean的名字
type spring 将它解释成bean 的类型
如果我们定义了name那么spring 就使用byName 方式注入
如果我们定义了type 那么spring 就用byTyte方式注入
如果两者都没有定义那么就默为byName
2)不管是通过实现 InitializingBean/DisposableBean 接口,还是通过 <bean> 元素的init-method/destroy-method 属性进行配置,都只能为 Bean 指定一个初始化 / 销毁的方法。但是使用@PostConstruct 和@PreDestroy 注释却可以指定多个初始化 / 销毁方法,那些被标注@PostConstruct 或 @PreDestroy 注释的方法都会在初始化 / 销毁时被执行。
3. 使用: <context:annotation-config />
AutowiredAnnotationBeanPostProcessor 和 CommonAnnotationBeanPostProcessor 就是处理这些注释元数据的处理器。但是直接在 Spring 配置文件中定义这些 Bean 显得比较笨拙。Spring 为我们提供了一种方便的注册这些BeanPostProcessor 的方式,这就是 <context:annotation-config/>。
本文详细解析了Spring框架中的@Autowired和@Resource注解的区别,包括它们如何用于装配bean,以及如何通过@Qualifier注解进行更精细的控制。此外,文章还介绍了JSR-250提供的@Resource、@PostConstruct以及@PreDestroy注释,这些注释在Bean的初始化和销毁阶段提供了更多的灵活性。
&spm=1001.2101.3001.5002&articleId=7618659&d=1&t=3&u=f97b5e4b239547818d4dd8975bef98b9)
182

被折叠的 条评论
为什么被折叠?



