@Autowired & @Resource 区别 & 解读@Bean
一样
Autowired & @Resource 都可以用来Bean的注入,可以写在属性(字段)上、也可以写在setter方法上
不一样
1.来源不一样
@Autowired 由Spring提供
@Resource 由J2EE提供
2.注入方式不一样
@Autowired 默认ByType(按类型注入),若需按名字,则配合使用@Qualifier,默认依赖对象必须存在,若允许不存在,需指定required=false
@Resource 默认ByName(按名字注入),若找不到对应的Bean,会继续按类型去找;但一旦指定了name,那么只会按名字去找Bean
3.不重要的不一样
@Autowired 使用属性(字段)注入的话,有的编译器要警告,建议使用构造方法注入;@Resource 则不会,然而,@Resource不能使用构造方法注入
如果使用属性(字段)注入的话,则容易出现NullPointerException;如果使用setter方法注入,则属性不能设置为final
争论:
有人说使用@Resource可以解耦(个人不太认同,为什么呢?)
首先,使用注解进行对Bean的注入,但是,我们得需要一个机制(一些处理类<解析器>)来对这些使用了@Autowired & @Resource 进行解析,比如:
然而以上这些解析类都是由Spring提供的,所以说,不太能解耦啊(我是这样理解的,欢迎指正)
我们会在applicationContext.xml 中配置 <context:annotation-config/> ----这句话的作用就是:激活那些已经在spring容器里注册过的bean,@Autowired 、@Resource注解本身不能做任何事情,我们需要一些工具来处理这些,而这句配置就是来加载这里工具(如上面的四个Processor)
@Configuration
public class BeanConfig {
@Bean
public Student student() {
return new Student();
} @Bean
public Course course() {
return new Course(student());
}
}
@Component
public class BeanConfig {
@Bean
public Student student() {
return new Student();
} @Bean
public Course course() {
return new Course(student());
}
}
- 扫描(@ComponentScan)+ 组件使用注解类(@Controller、@Service、@Repository、@Configuration、@Component);
- 用@Bean注解;
- 用@Import
注解
注解;- @Import快速注册;For Example:@Import(value = {BeanConfig.class, UserVO.class}),UserVO可以使用@Component,也可以不使用
- 实现ImportSelector接口
- 实现ImportBeanDefinitionRegistrar接口
- 用FactoryBean接口;
基本作用域(singleton、prototype)
,Web 作用域(reqeust、session、globalsession)
,自定义作用域
。Spring默认使用singleton作用域
singleton:单例模式,在整个Spring IoC容器中,使用singleton定义的Bean将只有一个实例
prototype:原型模式,每次通过容器的getBean方法获取prototype定义的Bean时,都将产生一个新的Bean实例
request:对于每次HTTP请求,使用request定义的Bean都将产生一个新实例,即每次HTTP请求将会产生不同的Bean实例。只有在Web应用中使用Spring时,该作用域才有效
session:对于每次HTTP Session,使用session定义的Bean都将产生一个新实例。同样只有在Web应用中使用Spring时,该作用域才有效
globalsession:每个全局的HTTP Session,使用session定义的Bean都将产生一个新实例。典型情况下,仅在使用portlet context的时候有效。同样只有在Web应用中使用Spring时,该作用域才有效
@Autowired & @Resource 区别 & 解读@Bean的更多相关文章
- @Autowired @Resource @Qualifier的区别
参考博文: http://www.cnblogs.com/happyyang/articles/3553687.html http://blog.csdn.net/revent/article/det ...
- Autowired和Resource区别
@Autowired和@Resource熟悉吧?是不是经常复制粘贴顺手就来,两者都是用来给成员变量自动装载,可是它俩到底有啥区别呢? 1.@Autowired与@Resource都可以用来装配bean ...
- 【Java面试】@Resource 和 @Autowired 的区别
Hi,大家好,我是Mic. 一个工作2年的粉丝,问我一个Spring里面的问题. 希望我能从不同的视角去分析,然后碾压面试官. 这个问题是: "@Resource和@Autowired&qu ...
- Spring通过注解@Autowired/@Resource获取bean实例时为什么可以直接获取接口而不是注入的类
问: 这个问题困扰了我好久,一直疑问这个接口的bean是怎么注入进去的?因为只看到使用@Service注入了实现类serviceImpl,使用时怎么却获取的接口,而且还能调用到实现类的方法,难道这个接 ...
- @Required @Autowired @Resource注解详解
一.@Required注解用于检查特定的属性是否设置 1.RequiredAnnotationBeanPostProcessor 为该注解的处理器,即bean后置处理器,检查所有带有该解的bean属性 ...
- @Resource和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- spring @Resource和@Autowired的区别
@Resource的作用相当于@Autowired,只不过@Autowired按byType自动注入,而@Resource默认按 byName自动注入罢了.@Resource有两个属性是比较重要的,分 ...
- Spring注解@Resource和@Autowired的区别
@Resource和@Autowired都是用来做bean的依赖注入的,两者都可以写在字段和setter方法上. java为我们提供了 javax.annotation.Resource这个注解. s ...
- spring中@Autowired与 @Resource区别
@Autowired 与@Resource的区别: 1. @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上. 2. @Autowired默认 ...
随机推荐
- 设计模式--访问者模式C++实现
访问者模式C++实现 1定义Visitor Pattern 封装一些作用于某种数据结构中各元素的操作,他可以在不改变数据结构的前提下定义作用于这些元素新的操作 2类图 角色分析 Visitor抽象访问 ...
- Java 完美判断字符串中中文字符【中文符号】
package com.cmc.util; import java.util.regex.Pattern; public class CharUtil { public static void mai ...
- mysql 在创建表或者插入时遇到关键字报错
mysql 在创建表或者插入时遇到关键字:比如name,status等.都不报错 解决方法:在字段上加上` 上面这个符号是键盘ecs下面那个符号
- 强连通分量算法-codevs1332
解决有向图的强连通分量的算法,有两个,一个是tarjan,一个是kosaraju,上午只看了一下kosaraju,不算太难,理解之后写了个模板题. 先说kosaraju算法,算法的主要思路是进行两次d ...
- nyoj——297(期望)
GoroSort 时间限制:3000 ms | 内存限制:65535 KB 难度:4 描述 Goro has 4 arms. Goro is very strong. You don't me ...
- Highcharts 配置语法;Highcharts 配置选项详细说明
Highcharts 配置语法 本章节我们将为大家介绍使用 Highcharts 生成图表的一些配置. 第一步:创建 HTML 页面 创建一个 HTML 页面,引入 jQuery 和 Highchar ...
- ( 转)Sqlserver中tinyint, smallint, int, bigint的区别 及 10进制转换16进制的方法
一.类型比较 bigint:从-2^63(-9223372036854775808)到2^63-1(9223372036854775807)的整型数据,存储大小为 8 个字节.一个字节就是8位,那么b ...
- poj2771
题解: 二分图最大独立及 每两个不能选的渐变 输出n+m-最大匹配 代码: #include<cstdio> #include<cmath> #include<algor ...
- 【Html 学习笔记】第五节——表格
表格也是日常用到的. 普通表格:<table> 表格边框:border 表头:th 表格标题:caption 横/纵向合并的单元格:colspan .rawspan 表格内标签: 单元格间 ...
- AOP的Advice
@Before 方法执行之前执行 @AfterReturning 方法正常执行完成后执行 @AfterThrowing 抛出任何异常之后执行 @After 就是相当于finally,它会将你的方法t ...