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>