2013年1月6日日曜日

アノテーションによるDI

設定ファイルにクラスを定義せずにDIする方法の備忘録。
設定ファイルもコードもかなりすっきりする!

Q:設定ファイルにクラスを定義せずにSpringはどのようにクラスを見つけるのか?

A:アノテーションを使ってSpringにクラスを登録する。

  例えば、以下のように各クラスにアノテーションを付与する。

  コントローラクラスには@Controller
  サービスクラスには、@Service
  DAOクラスには、@Repository

  Spring MVCでは、3階層構造の各層にアノテーションを割り当てている。

Q:インスタンス変数に適切なインスタンスをDIするために、どうするのか?

A:@Autowiredをつけて、そのインタフェースを実装するクラスをSpringに登録することにより、
  Springがそのインスタンスを自動的にDIする。

ただし、設定ファイルには、<context:component-scan>要素を記述する必要がある。

■コード例
@Controller
public class IndexController {
    @Autowired 
    private Shop shopService;

■Spring設定ファイル記述例
 <context:component-scan base-package="controller,dao,service" />


アノテーションを使わない場合は、下記のように記述量が多くなる。
DIするインスタンスの単位でセッターと設定ファイルの記述が必要。

■コード例
 private Shop shopService;
     public void setShopService(Shop shopService){
         this.shopService = shopService;
     }

■Springファイル記述例
 <!-- Controller -->
 <bean id="loginFormController" class="controller.LoginFormController"
  p:shopService-ref="shopService">
 </bean>

0 件のコメント:

コメントを投稿