@Resource vs @Autowired

annotations, autowired, dependency-injection, java, spring

Solution

In spring pre-3.0 it doesn't matter which one.

In spring 3.0 there's support for the standard (JSR-330) annotation `@javax.inject.Inject` - use it, with a combination of `@Qualifier`. Note that spring now also supports the `@javax.inject.Qualifier` meta-annotation:

@Qualifier
@Retention(RUNTIME)
public @interface YourQualifier {}

So you can have

<bean class="com.pkg.SomeBean">
   <qualifier type="YourQualifier"/>
</bean>

or

@YourQualifier
@Component
public class SomeBean implements Foo { .. }

And then:

@Inject @YourQualifier private Foo foo;

This makes less use of String-names, which can be misspelled and are harder to maintain.

As for the original question: both, without specifying any attributes of the annotation, perform injection by type. The difference is:

- `@Resource` allows you to specify a name of the injected bean

- `@Autowired` allows you to mark it as non-mandatory.

Problem

Which annotation, @Resource (jsr250) or @Autowired (Spring-specific) should I use in DI? I have successfully used both in the past, `@Resource(name="blah")` and `@Autowired @Qualifier("blah")` My instinct is to stick with the `@Resource` tag since it's been ratified by the jsr people. Anyone has strong thoughts on this?

Original source

Related problems