Spring知识点梳理: Spring的优势: (1)通过IOC帮助开发者管理,维护对象; (2)通过AOP,帮助开发者统一业务逻辑之外的功能代码,如:记录日志,检查权限等; (3)提供了一组API和配置方式来帮助我们简化事务管理; (4)方便集成其它框架,如Struts,Hibernate、Hessian、Quartz的直接集成; (5)对很多Java EE API(如JDBC,JavaMail,远程调用)进行了简易封装,降低这些API的使用难度。 |
- Spring框架引入
Struts与Hibernate可以做什么事? |
Struts: MVC中控制层解决方案 :可以进行请求数据自动封装、类型转换、文件上传、效验…; Hibernate: 持久层的解决方案:可以做到,把对象保存到数据库, 从数据库中取出的是对象; |
-
传统开发的模式
-
基于mvc模式进行项目开发,项目结构为:
domain(实体类) / dao / service / action
- 那么传统开发模式的开发流程和执行流程是什么样的呢?
-
// 1.我们会在底层创建 实体类 class User{ } //2. 之后是dao持久层 class UserDao{ ..访问db } //3. 在往上是service业务逻辑层 class UserService{ UserDao userDao = new UserDao(); } //4. 最后是action视图层 class UserAction{ UserService userService= new UserService(); .. //拿到数据或结果 } |
用户访问在浏览器输入/user.action --> 发送请求到Tomcat (服务器逐级创建Action,Service,dao)--> action拿到数据,传递给service---> service对数据进行合理性校验,数据正确传递给DAO---> DAO将数据存储进数据库,并返回存储结果---> service返回DAO结果---> action返回结果---> 服务器返回给浏览器响应结果 |
-
问题:
-
对象创建能否写死:
不能,如果写死不利于维护,以及程序的拓展;
如何解决呢?
可以将实例化对象写入到配置文件中,然后利用"工厂"来创建
- 对象创建细节
-
对象数量: | ||||||
| ||||||
创建时间: | ||||||
|
- 对象的依赖关系
action 依赖 | service |
service依赖 | dao |
-
总结
spring可以解决如上问题
简单来说,就是处理对象的创建,以及维护对象的依赖关系!
-
Spring相关信息
- Spring框架的主页:http://www.springsource.org/
- Spring框架下载地址:http://www.springsource.org/download
-
Spring特点
- Spring提供的一站式解决方案
Spring Core | Spring的核心功能: IOC容器, 解决对象创建及依赖关系 |
Spring Web | Spring对web模块的支持; 可以与Struts整合,让Struts的action创建交给Spring 也可以使用自己的spring mvc模式 |
Spring DAO | Spring 对jdbc操作的支持 【JdbcTemplate模板工具类】 |
Spring ORM | Spring对ORM的支持: 既可以与hibernate整合,也可以对hibernate的封装进行操作; |
Spring AOP | 切面编程 |
SpringEE | Spring 对javaEE其他模块的支持 |
- 专业术语了解
|
- Spring开发步骤
1.首先要注意,在spring各个版本中:
2. 源码: Spring jar包:spring-framework-3.2.5.RELEASE(压缩包)
3.设定配置文件:
4.Spring常用API: 1.得到IOC容器对象 ApplicationContext ac = new ClassPathXmlApplicationContext("配置文件路径"); 2.从容器中获取bean ac.getBean("配置文件的id"); |
- 加载Spring配置文件的几种方式
-
从Spring容器获取bea
- 当spring容器启动后,spring容器可管理bean对象的创建、销毁等生命周期,只需从容器直接获取Bean对象,而不用编写代码来创建bean对象。
- 两种方式:
通过工厂类得到IOC容器创建的对象 Resource resource= new ClassPathResource("hey/up/a_hello/applicationContext.xml"); BeanFactory factory= new XmlBeanFactory(resource); User user= (User) factory.getBean("user"); |
(方便)直接得到IOC容器对象 ApplicationContext ctx=new ClassPathXmlApplicationContext("beans.xml"); User user= (User) cxf.getBean("user"); |
- 第一个示例
//举个栗子,此栗使用无参构造方法:无参构造方法创建对象 private int id; private String name; public User() { super(); System.out.println("------User对象创建------"); } public void init_user() { System.out.println("创建对象之后,初始化"); } public void destroy_user() { System.out.println("IOC容器销毁,user对象回收!"); } //get,set略 } |
public class App1_get_ioc{ // 1.通过工厂类得到IOC容器创建的对象 @Test public void testIOC()throws Exception{ //创建对象 // User user = new User();老式创建方式 //现在,把对象的创建交给spring的IOC容器 Resource resource= new ClassPathResource("hey/up/hello/applicationContext.xml"); //创建容器对象(Bean的工厂), IOC容器 =工厂类 + applicationContext.xml BeanFactory factory= new XmlBeanFactory(resource); //得到容器创建的对象 User user= (User) factory.getBean("user"); System.out.println(user.getId()); } //2.(方便)直接得到IOC容器对象 @Test public void testAc()throws Exception{ //得到IOC容器对象 ApplicationContext ac= new ClassPathXmlApplicationContext("hey/up/hello/applicationContext.xml"); //从容器中获取bean User user= (User) ac.getBean("user"); System.out.println(user); } } |
<?xmlversion="1.0"encoding="UTF-8"?> <beansxmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd"> <!-- IOC容器的配置: 要创建的所有的对象都配置在这里 <bean id="user" class="hey.up.hello.User" init-method="init_user" destroy-method="destroy_user" scope="singleton" lazy-init="false"></bean> --> <beanid="user"class="hey.up.hello.User"></bean> </beans> |