1、Spring 核心容器理论:Spring就是一个大容器, 只要是一个java类,Spring就可以管理该java类,并把它当成bean处理。对于Spring框架而言,一切java对象都是bean.
2、Spring通过XML配置文件管理容器中的Bean。Spring对XML文件名无任何要求
<beans> <bean id="userdao" class="struts44.UserDao"> </bean> <bean id="handleAction" class="struts44.HandleDataAction"> <property name="userdao" ref="userdao"></property> </bean> </beans>
每一个Bean就表示一个java类,<bean></bean>元素默认以反射方式调用该类无参数构造器。id为容器中唯一标识,class的值是具体类。
<property> 是<bean>的子元素,它驱动Spring在底层以反射执行一次setter方法。 name属性值决定执行哪一个setter方法
,而value或ref决定执行setter方法的传入参数。
(1)如果传入参数是基本类型,则使用value属性传参数
(2)如果以容器中其他Bean作为传入参数,则使用ref属性指定传入参数
下面的例子就是以容器中的userdao作为传入参数,使用ref;
3、struts中整合Spring
注册用户,数据保存到数据库,显示注册信息
1)在项目中添加驱动
2)注册界面 reg.jsp
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>Insert title here</title> </head> <body> <form action="handleAction" method="post"> <label>账号</label><input name="user.zhanghao"/><br/> <label>昵称</label><input name="user.nicheng"/><br/> <label>密码</label><input type="password" name="user.mima"/><br/> <label>邮箱</label><input name="user.youxiang"/><br/> <label>QQ号</label><input name="user.qq"/><br/> <input type="submit" value="注册"/> </form> </body> </html>
3)用户提交的数据到handAction处理
package struts44; import javax.websocket.Session; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.ActionSupport; public class HandleDataAction extends ActionSupport { User user=null; UserDao userdao=null; public UserDao getUserdao() { return userdao; } public void setUserdao(UserDao userdao) { this.userdao = userdao; } public User getUser(){ return user; } public void setUser(User user) { this.user = user; } public String execute(){ int id=userdao.insertUser(user); if(id>0){ user=userdao.getUser(id); ActionContext ctx=ActionContext.getContext(); /* * ActionContext 可以访问和设置Application Session Requst的值 * */ ctx.getSession().put("user", user); System.out.println("it's fine"+id); return SUCCESS; } else{ //addActionMessage("error"); return "error"; } } }
在 handAction中,将Uesrdao设置成为一个成员变量。赋值为null,并添加set,get方法。Spring在底层会给它new一个Userdao实例,并将这个对象注入到这个成员变量。
4)在application.xml配置bean, 这里 有两个bean,分别对应两个java类。
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd"> <beans> <bean id="userdao" class="struts44.UserDao"> </bean>
<bean id="handleAction" class="struts44.HandleDataAction"> <property name="userdao" ref="userdao"></property>//在handActon下在成员变量userdao 的set方法里传另一个bean元素userdao </bean>
</beans>