我是Spring的新手,我尝试了解@Autowired注释如何与struts2动作一起工作。这是我的情况:
@Autowired
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?
首先,UserBean除非您的应用程序中只有一个User对象,否则它似乎是一个数据载体,而不应该是Spring托管的bean。
UserBean
其次,content:component- scan只会处理以注释的类@Component。由于您没有注释UserBean类,因此不会自动识别它,@Autowired除非您将其明确声明为bean,就像在上下文文件中所做的那样。
content:component- scan
@Component