小编典典

使用Struts2的@Autowired Spring注释

spring-mvc

我是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 Container自动注入吗?

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


阅读 388

收藏
2020-06-01

共1个答案

小编典典

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

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

2020-06-01