1

我是 Spring 的新手,我试图了解@Autowired注释如何与 struts2 动作一起工作。这是我的场景:

用户Bean.java

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

     /*Getters and Setters */
}

用户操作.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;
     }
 }

应用程序上下文.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 Container 自动注入吗?

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

4

1 回答 1

1

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

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

于 2013-10-25T21:48:25.813 回答