Struts2のAction専用のスキャン用Annotationを作る
context:component-scanを設定するとSpringがAnnotationをスキャンしてBean生成を行うが、Struts2用のアクションであることが明示された方が後々都合がいいかもしれないので、専用のステレオタイプAnnotationを作っておく。
こうしておけば、例えばStruts2のActionにだけまとめてAOPしたいなどの要求に容易に応えられる。
jp.co.hershe.struts2.util.Struts2Action.java
package jp.co.hershe.struts2.util; import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.stereotype.Component; @Target( {ElementType.TYPE} ) @Retention( RetentionPolicy.RUNTIME ) @Documented @Component public @interface Struts2Action { String value() default ""; }
これでAction側は次のようになる。
import javax.annotation.Resource; import jp.co.hershe.struts2.util.Struts2Action; import org.springframework.context.annotation.Scope; @Struts2Action("UserAction") @Scope("request") public class UserAction extends ActionSupport implements ModelDriven<User> { @Resource private UserDAO udao; :
スキャンするときに意図しないBeanが生成されないようにAnnotationでフィルタする。
<context:component-scan base-package="tutorial"> <context:include-filter type="annotation" expression="jp.co.hershe.struts2.util.Struts2Action"/> </context:component-scan>