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>
※他のファイルは省略
まだ回答がついていません
会員登録して回答してみよう