設定ファイルにクラスを定義せずに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 件のコメント:
コメントを投稿