@Autowired Spring注释与struts2

时间:2013-10-25 21:41:04

标签: spring spring-mvc struts2

我是Spring的新手,我尝试了解@Autowired注释如何与struts2操作一起使用。这是我的情景:

UserBean.java

public class UserBean {
     private String userName;
     private int userAge;
     private String userGender;
     private String userJob;
     private String[] userHobbies;

     /*Getters and Setters */
}

UserAction.java

@Component
public class UserAction extends ActionSupport implements ModelDriven<UserBean> {

     @Autowired
     private UserBean userBean;

     public String execute() {
         return SUCCESS;
     }

     public String addUser() {
         return SUCCESS;
     }

     public UserBean getModel() {
         return userBean;
     }

     public UserBean getUserBean() {
         return userBean;
     }

     public void setUserBean(UserBean userBean) {
         this.userBean = userBean;
     }
 }

的applicationContext.xml

<context:annotation-config />
<context:component-scan base-package="com.gmail.amato.giorgio.*" />

<bean id="userAction" class="com.gmail.amato.giorgio.UserAction"></bean>
<bean id="userBean" class="com.gmail.amato.giorgio.UserBean"></bean>

现在我的程序很好,我没有任何错误:我可以看到一个表单,填写并查看结果给我。

我的问题是:如果我使用@Autowired注释,为什么我必须为userBean编写bean id?它应该由Spring容器自动注入?

如果我还要在@Autowired中编写两个bean定义,使用applicationContext.xml注释有什么好处?

1 个答案:

答案 0 :(得分:1)

首先,UserBean似乎是一个数据载体,除非您的应用程序中只有一个User对象,否则它不应该是Spring托管bean。

其次,content:component-scan只会处理用@Component注释的类。由于您没有注释UserBean类,因此除非您将其明确声明为bean,否则它不会自动识别并@Autowired,就像您在上下文文件中所做的那样。