1. ホーム

[解決済み】@Resourceと@Autowiredの比較

2022-04-29 02:21:09

質問

どのアノテーションか。 リソース ( jsr250 ) または オートワイヤード (Spring固有)をDIで使うべきでしょうか?

過去に両方をうまく使ったことがあります。 @Resource(name="blah")@Autowired @Qualifier("blah")

私の直感では @Resource タグは、jsrの人たちによって承認されたものだからです。

どなたか強い考えをお持ちの方はいらっしゃいますか?

解決方法は?

Spring 3.0以前では、どれでもかまいません。

Spring 3.0 では、標準的な ( JSR-330 ) アノテーション @javax.inject.Inject - を組み合わせて使用します。 @Qualifier . Springは現在、以下のようなものもサポートしています。 @javax.inject.Qualifier メタアノテーションを使用します。

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

だから、あなたは

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

または

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

そして

@Inject @YourQualifier private Foo foo;

これにより、スペルミスの可能性があり、保守が困難なString-namesを使用することが少なくなります。


最初の質問ですが、どちらもアノテーションの属性を指定することなく、型によるインジェクションを実行します。違いは

  • @Resource は、注入されたビーンの名前を指定することができます。
  • @Autowired を使用すると、それを非必須とマークすることができます。