質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

解決済

Springで@Autowiredと@Resourceの使い分け

argius
argius

総合スコア9380

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

2回答

2評価

0クリップ

15442閲覧

投稿2016/06/07 13:05

Struts2とSpring4でDIを試しているのですが、
下記のコードの場合において、@Autowired@Resourceの使い分けが分かりません。

コンポーネントのMyComponentとサービスのMyMessageServiceがありますが、
どちらも@Autowiredを指定しても@Resourceを指定しても動作します。

それぞれどちらを指定するのが正しいのでしょうか。
また、それはなぜでしょうか。
条件によってはどちらかしか使えないとしたら、その条件とは何でしょうか。

環境

  • Struts2 (v2.5)
  • Spring4 (v4.2.6)
  • Tomcat8 (v8.0.26)
  • Java8

よろしくお願いします。


以下、ソースコードを貼ります。

  • FirstAction.java

lang

package myapp.actions; import javax.annotation.Resource; import myapp.services.*; import org.apache.struts2.convention.annotation.*; // import org.springframework.beans.factory.annotation.Autowired; import com.opensymphony.xwork2.ActionSupport; public final class FirstAction { // @Autowired @Resource MyComponent comp; // @Autowired @Resource MyMessageService service; @Action(value = "/first", results = { @Result(location = "/index.jsp") }) public String doAction() { System.out.println(comp.calc(3, 5)); System.out.println(service.getMessage()); return ActionSupport.SUCCESS; } }
  • MyComponent.java

lang

package myapp.services; public interface MyComponent { public int calc(int a, int b); }
  • MyComponentImp.java

lang

package myapp.services; import org.springframework.stereotype.Component; @Component public final class MyComponentImp implements MyComponent { @Override public int calc(int a, int b) { return a + b; } }
  • MyMessageService.java

lang

package myapp.services; import org.springframework.stereotype.Service; @Service public final class MyMessageService { public String getMessage() { return "MyMessageService.getMessage()"; } }
  • applicationContext.xml

lang

<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd"> <context:annotation-config /> <context:component-scan base-package="myapp" /> </beans>

※他のファイルは省略

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。