What is the difference between @Inject and @Autowi

2019-01-04 04:33发布

I am going through some blogs on SpringSource and in one of the blogs, author is using @Inject and I suppose he can also use @Autowired.

Here is the piece of code:

@Inject private CustomerOrderService customerOrderService;

I am not sure about the difference between @Inject and @Autowired and would appreciate it if someone explained their difference and which one to use under what situation?

10条回答
聊天终结者
2楼-- · 2019-01-04 04:42

As of Spring 3.0, Spring offers support for JSR-330 dependency injection annotations (@Inject, @Named, @Singleton).

There is a separate section in the Spring documentation about them, including comparisons to their Spring equivalents.

查看更多
The star\"
3楼-- · 2019-01-04 04:46

In addition to the above:

  1. The default scope for @Autowired beans is Singleton whereas using JSR 330 @Inject annotation it is like Spring's prototype.
  2. There is no equivalent of @Lazy in JSR 330 using @Inject
  3. There is no equivalent of @Value in JSR 330 using @Inject
查看更多
别忘想泡老子
4楼-- · 2019-01-04 04:46

The @Inject annotation is one of the JSR-330 annotations collection. This has Match by Type,Match by Qualifier, Match by Name execution paths. These execution paths are valid for both setter and field injection.The behavior of @Autowired annotation is same as the @Inject annotation. The only difference is the @Autowired annotation is a part of the Spring framework. @Autowired annotation also has the above execution paths. So I recommend the @Autowired for your answer.

查看更多
我命由我不由天
5楼-- · 2019-01-04 04:50

The key difference(noticed when reading the Spring Docs) between @Autowired and @Inject is that, @Autowired has the 'required' attribute while the @Inject has no 'required' attribute.

查看更多
等我变得足够好
6楼-- · 2019-01-04 04:51

Here is a blog post that compares @Resource, @Inject, and @Autowired, and appears to do a pretty comprehensive job.

From the link:

With the exception of test 2 & 7 the configuration and outcomes were identical. When I looked under the hood I determined that the ‘@Autowired’ and ‘@Inject’ annotation behave identically. Both of these annotations use the ‘AutowiredAnnotationBeanPostProcessor’ to inject dependencies. ‘@Autowired’ and ‘@Inject’ can be used interchangeable to inject Spring beans. However the ‘@Resource’ annotation uses the ‘CommonAnnotationBeanPostProcessor’ to inject dependencies. Even though they use different post processor classes they all behave nearly identically. Below is a summary of their execution paths.

Tests 2 and 7 that the author references are 'injection by field name' and 'an attempt at resolving a bean using a bad qualifier', respectively.

The Conclusion should give you all the information you need.

查看更多
仙女界的扛把子
7楼-- · 2019-01-04 04:56

To handle the situation in which there is no wiring, beans are available with @Autowired required attribute set to false.

But when using @Inject, the Provider interface works with the bean which means that the bean is not injected directly but with the Provider.

查看更多
登录 后发表回答