1:spring core:提供了spring 的核心功能,BeanFactory是spring核心容器的主要组件, 它通过Ioc把程序的配置和依赖性与实际的代码分开,是整个spring的基础
2:spring context:通过配置文件向spring提供上下文信息, 它构建在BeanFactory之上,另外增加了国际化和资源访问等功能
3:spring dao:提供了一个简单有效的JDBC应用
4:spring aop:提供了面向方面编程的功能 5:spring orm:spring除了有自己的JDBC以外还提供了对其他ORM框架的支持,如Hibernate,都可以和spring进行良好的结合 6:spring web:提供了简化的处理多部分请求以及把请求参数绑定到域的任务。 7:spring MVC:提供了MVC2模式的实现,也可以和struts良好的集成在一起。
这七大模块可以单独使用,不需要其他模块的支持 -------------------------------------------------------- spring的特点: 1:设计良好的分层结构。 2:以IOC为核心,提倡面向接口编程。 3:良好的架构设计。 4:可以代替EJB 5:实现了MVC2 6:可以和其他框架良好的结合如:Hibernate ,struts等 编写第一个HelloWorld程序: 1:interface public interface IHelloWorld { public void sayHello(); } 2:实现类: public class HelloWorld implements IHelloWorld{ private String msg; public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void sayHello(){ System.out.println(msg); } } 3:编写spring配置文件:applicationContext.xml
---------------------------------------------------------------------依赖注入的三种方式:1:接口注入2:set注入3:构造注入spring支持set注入和构造注入把上面的HelloWorld改为构造注入: 1:实现类: public class CHelloWorld implements IHelloWorld{ public String msg; public CHelloWorld(String msg){ this.msg = msg; } public void sayHello(){ System.out.print(msg); } } 2:在spring配置文件:applicationContext.xml中:
3:编写测试类: public class TestHelloWorld { public static void main(String[] args) { ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); IHelloWorld hw= (IHelloWorld)ac.getBean("CHello"); hw.sayHello(); }}
---------------------------------------------------------------------------Spring的核心容器:
spring中两个最基本最重要的包:org.springframework.context和org.springframework.beans为spring的IOC提供了基础在这两个最重要的类是BeanFactory和ApplicationContext。BeanFactory来管理各种bean。ApplicationContext在BeanFactory之上增加了其他功能如国际化,获取资源事件传递等。1:bean的标志(id 和name) 每个bean都有一个id在管理bean的BeanFactory和ApplicationContext中必须是唯一标志。 id和name都可以用来指定id这两者中至少有一个。区别是id的命名必须符合xml id中和合法字符。name则没有,而且可以使用name指定多个id
2:bean的类
class属性路径要完整,包名.类名
3:singleton的使用 在spring 中bean可以定义为两种部署模式:singleton和non-singleton singleton:只有一个共享的实例存在 non-singleton:每次请求都创建新的实例
4:bean的属性: 在定义bean的属性时除了直接指定bean的属性外还可以参考配置文件中定义的其他bean 1:
5:null值的处理 把属性设为null值有两种方法: 1:
6:使用depends-on
bean的depends-on可以用来在初始化这个bean前,强制执行一个或多个bean的初始化。 如: --------------------------------------------------------------------------------------- bean的生命周期: 1:bean的定义 //配置bean的开始,beans中包含一个或多个bean applicationContext.xml文件中 2实现org.springframework.beans.factory.InitialingBean接口 实现其中的afterPropertiesSet()方法 public class HelloWorld implements InitializingBean{ private String msg; public void afterPropertiesSet(){ msg="Hello World"; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void sayHello(){ System.out.println(msg); } } applicationContext.xml文件中 3:使用ApplicationContext ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml"); IHelloWorld hw= (IHelloWorld)ac.getBean("CHello"); hw.sayHello(); 4:bean的销毁 销毁有两种方式: 1在配置文件中指定destory-method属性来完成 public class HelloWorld { private String msg; public void init(){ msg="Hello World"; } public void cleanup(){ msg=""; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void sayHello(){ System.out.println(msg); } } applicationContext.xml文件中 2实现org.springframework.beans.factory.DisposeableBean接口 实现其中的destory()方法 public class HelloWorld implements InitializingBean,DisposeableBean{ private String msg; public void afterPropertiesSet(){ msg="Hello World"; } public void destory(){ msg=""; } public String getMsg() { return msg; } public void setMsg(String msg) { this.msg = msg; } public void sayHello(){ System.out.println(msg); } } applicationContext.xml文件中 2:set public class HelloWorld{ //定义一个Set变量msg Set msg=null; public void setMsg(Set msg){ this.msg = msg; } } xml文件: 4:properties public class HelloWorld{ //定义一个properties变量msg Properties msg; public void setMsg(Properties msg){ this.msg = msg; } } xml文件: applicationContext.xml: 4:创建Action时: public class LogAction extends Action { private LoginInterface logInterface; public ActionForward execute( ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { LoginForm loginForm = (LoginForm) form; // TODO Auto-generated method stub boolean you = logInterface.checkUser(loginForm.getName(),loginForm.getPassword()); if(you){ request.setAttribute("msg; return mapping.findForward("show"); } else{ request.setAttribute("msg } } applicationContext.xml: 2:注册。 3:声明在何处拦截代码。 这看起来非常简单的几句话却非常强大。例如,在清单 7 中,我为 Struts 动作创建了一个日志记录。 这个在每个方法调用之前打印一句话: 清单 7. 一个简单的日志记录 public class LoggingInterceptor implements MethodBeforeAdvice { public void before(Method method, Object[] objects, Object o) throws Throwable { System.out.println("logging before!"); } } 这个非常简单。before() 方法在拦截点中每个方法之前运行。在本例中,它打印出一句话,其实它可以做您想做的任何事。下一步就是在 Spring 配置文件中注册这个,如清单 8 所示: 清单 8. 在 Spring 配置文件中注册 您可能已经注意到了,清单 8 扩展了 清单 6 中所示的应用程序以包含一个。具体细节如下: 在 (1) 处,我注册了这个。 在 (2) 处,我创建了一个 bean 名称自动代理,它描述如何应用。还有其他的方法定义拦截点,但是这种方法常见而简便。 在 (3) 处,我将 Struts 动作注册为将被拦截的 bean。如果您想要拦截其他的 Struts 动作,则只需要在 "beanNames" 下面创建附加的 在 (4) 处,当拦截发生时,我执行了在 (1) 处创建的 bean 的名称。这里列出的所有都应用于“beanNames”。 就是这样。就像这个例子所展示的,将您的 Struts 动作置于 Spring 框架的控制之下,为处理您的 Struts 应用程序提供了一系列全新的选择。在本例中,使用动作委托可以轻松地利用 Spring 提高 Struts 应用程序中的日志记录能力。 ----------------------------------------------------------------------------------------------- Struts + Spring + Hibernate的整合使用 开发工具:Eclipse3.1,MyEclipse4.0 ,Tomcat5.0.28,mysql-4.0.18 开发步骤: 1:创建web projectSSHlogin 加入struts1.2 创建loginForm选择DynaValidatorForm,加入password,username,创建jsp文件打上钩,将路径改为/login.jsp,然后下一步,改LoginAction的Input source改为/login.jsp,加入 修改LoginAction.java文件,使用userDao的方法来进行用户验证 package com.test.struts.action; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.apache.struts.action.Action; import org.apache.struts.action.ActionForm; import org.apache.struts.action.ActionForward; import org.apache.struts.action.ActionMapping; import org.apache.struts.validator.DynaValidatorForm; import com.test.UserDAO; public class LoginAction extends Action { private UserDAO userDAO; public UserDAO getUserDAO() { return userDAO; } public void setUserDAO(UserDAO userDAO) { this.userDAO = userDAO; } public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) { DynaValidatorForm loginForm = (DynaValidatorForm) form; // TODO Auto-generated method stub String username = (String) loginForm.get("username"); String password = (String) loginForm.get("password"); loginForm.set("password", null); if (userDAO.isValidUser(username,password)) { return mapping.findForward("ok"); } else { return mapping.getInputForward(); } } } 现在剩下最后的spring配置了