annotation之@Autowired、@Inject、@Resource三者区别

3人阅读 评论(0) 收藏 举报
分类:

https://www.cnblogs.com/pjfmeng/p/7551340.html

一、@Autowired

1、@Autowired是spring自带的注解,通过‘AutowiredAnnotationBeanPostProcessor’ 类实现的依赖注入;

2、@Autowired是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Qualifier;

3、@Autowired有个属性为required,可以配置为false,如果配置为false之后,当没有找到相应bean的时候,系统不会抛错;

4、@Autowired可以作用在变量、setter方法、构造函数上。

 

a、将@autowored写在被注入的成员变量上,就不用再xml文件中配置了,在程序中去掉相应的setter和getter方法,

 

b、还可以写在构造方法上、setter方法上

 

c、@Qualifier

@Qualifier("XXX") 中的 XX是 Bean 的名称,所以 @Autowired 和 @Qualifier 结合使用时,自动注入的策略就从 byType 转变成 byName 了。

不过需要注意的是@Autowired 可以对成员变量、方法以及构造函数进行注释,而 @Qualifier 的标注对象是成员变量、方法入参、构造函数入参

 

二、@Inject

1、@Inject是JSR330 (Dependency Injection for Java)中的规范,需要导入javax.inject.Inject;实现注入。

2、@Inject是根据类型进行自动装配的,如果需要按名称进行装配,则需要配合@Named;

3、@Inject可以作用在变量、setter方法、构造函数上。

 

a、将@Inject可以作用在变量、setter方法、构造函数上,和@Autowired一样

 

b、@Named

@Named("XXX") 中的 XX是 Bean 的名称,所以 @Inject和 @Named结合使用时,自动注入的策略就从 byType 转变成 byName 了。

 

 

三、@Resource

1、@Resource是JSR250规范的实现,需要导入javax.annotation实现注入。

2、@Resource是根据名称进行自动装配的,一般会指定一个name属性

3、@Resource可以作用在变量、setter方法上。

 

a、@Resource实例

 

 

 

总结:

1、@Autowired是spring自带的,@Inject是JSR330规范实现的,@Resource是JSR250规范实现的,需要导入不同的包

2、@Autowired、@Inject用法基本一样,不同的是@Autowired有一个request属性

3、@Autowired、@Inject是默认按照类型匹配的,@Resource是按照名称匹配的

4、@Autowired如果需要按照名称匹配需要和@Qualifier一起使用,@Inject和@Name一起使用

查看评论

@Inject和@Autowired以及@Resource区别

@Inject和@Autowired以及@Resource区别1、@Inject javax.inject JSR330 (Dependency Injection for Java) 这是jsr33...
  • u012734441
  • u012734441
  • 2016-06-18 17:23:51
  • 25982

Spring下@Resource, @Autowired和@Inject的区别与联系

这三种注解都可以实现依赖注入,那么它们有什么区别呢? 它们三者之间在依赖注入的时候行为非常相近。所以如果想要知道有什么不同,就得看具体实现了。 @Resource是用CommonAnnotatio...
  • hongchangfirst
  • hongchangfirst
  • 2017-02-03 18:30:43
  • 932

spring下应用@Resource, @Autowired 和 @Inject注解进行依赖注入的差异

代码: 为了探寻  ‘@Resource’, ‘@Autowired’, 和‘@Inject’如何解决依赖注入中的问题,我创建了一个“Party”接口,和它的两个实现类“Person”,“Org...
  • vivian5350
  • vivian5350
  • 2015-03-10 16:54:57
  • 1959

@Autowired @Resource @Inject的区别

测试环境:Intellij + gradle group 'com.xiya' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: '...
  • lgh1992314
  • lgh1992314
  • 2017-04-10 12:17:40
  • 1492

Spring IOC三种注解注入Inject、Resource、AutoWired区别与IOC注入过程

Spring三种注解方式的区别:@AutoWired、@Resource、@Inject 1、   @AutoWired是Spring自带的方式   @Resource是JSR-250标准,JDK6以...
  • qq_34212276
  • qq_34212276
  • 2017-09-09 01:08:14
  • 214

@Resource annotation is not supported on static fields

@Resource annotation is not supported on static fields   问题解决 写set方法,在set方法上做注解 @Component pu...
  • exception_class
  • exception_class
  • 2015-10-09 14:39:11
  • 2669

@Resource,@Autowired 和 @Inject的区别

1:注入顺序不同,@Autowired 和 @Inject先通过ByType(类名)注入,若没有注入成功再通过Qualifiers注入,最后通过ByName(对象名)注入。              ...
  • tc5123
  • tc5123
  • 2015-01-20 09:35:35
  • 423

Spring整理系列(10)——@Autowired自动装配、结合@Qualifier过滤及与JSR-250@Resource注解、JSR-330@Inject注解的区别、@Named使用

写在前面:在Spring整理系列(02)——spring依赖注入,组装对象之间的依赖关系文中,第三部分简单介绍了使用@Autowired注解自动装配bean的情况,此处引用一下。一、使用@Autowi...
  • javaloveiphone
  • javaloveiphone
  • 2016-08-10 14:29:53
  • 2222

@Resource与@Autowired注解的区别

一、写本博文的原因 年初刚加入到现在的项目时,在使用注解时我用的@Resource。后来,同事:你怎么使用@Resource注解?我:使用它有错吗?同事:没错,但是现在都使用@Autowired。我...
  • wangzuojia001
  • wangzuojia001
  • 2017-01-10 16:21:13
  • 6949
    个人资料
    等级:
    访问量: 94
    积分: 41
    排名: 182万+
    文章分类
    文章存档