2013年1月9日 星期三

Struts2 Convention Plugin with Spring Plugin

Struts2 Spring Plugin 詳解裡面我們提到StrutsSpringObjectFactory的運作方式,那麼如果我們使用了Struts2 Convention Plugin的話,又該怎麼設定讓它和Spring一起運作呢?

以下是以一個Action為範例,
代碼:
import org.apache.struts2.convention.annotation.Action;
import org.springframework.beans.factory.config.ConfigurableBeanFactory;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import com.opensymphony.xwork2.ActionSupport;

@Component("login-action")
@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)
public class LoginAction extends ActionSupport {
    @Action(className = "login-action")
    public String execute() {
        return SUCCESS;
    }
}
重點:
  1. @Component("login-action")讓Spring管理LoginAction instance。
  2. @Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)避開thread safe問題。
  3. @Action(className = "login-action")用來以Spring bean name覆蓋預設的full class name。
如此就可以在Convention Plugin的開發模式中運用Spring Plugin的特性。