我是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
注释有什么好处?
答案 0 :(得分:1)
首先,UserBean
似乎是一个数据载体,除非您的应用程序中只有一个User对象,否则它不应该是Spring托管bean。
其次,content:component-scan
只会处理用@Component
注释的类。由于您没有注释UserBean类,因此除非您将其明确声明为bean,否则它不会自动识别并@Autowired
,就像您在上下文文件中所做的那样。