spring基础

来源:互联网 发布:中电数据 江海 编辑:程序博客网 时间:2024/05/17 09:34

1.回顾struts与hibernate

struts:MVC中控制层解决方案,可以进行请求数据封装,类型转换,文件上传和下载、数据校验、防表单重复提交...

hibernate:持久层解决方案,把对象保存到数据库,从数据库取出的是对象。

用户访问:

/user.action ---->  Tomcat  (服务器创建ActionServicedao

 

思考:

    1. 对象创建创建能否写死?

    2. 对象创建细节

        对象数量

            action  多个   【维护成员变量】

            service 一个   【不需要维护公共变量】

            dao     一个   【不需要维护公共变量】

        创建时间

            action    访问时候创建

            service   启动时候创建

            dao       启动时候创建

    3. 对象的依赖关系

        action 依赖 service

        service依赖 dao

 

=======================================================

总结:

    spring就是解决上面的问题的!

简单来说,就是处理对象的创建的、以及对象的依赖关系!

2.Spring框架

2.1 专业术语了解


组件/框架设计

侵入式设计

引入了框架,对现有的类的结构有影响;即需要实现或继承某些特定类。

例如:Struts框架

非侵入式设计

引入了框架,对现有的类结构没有影响。

例如:Hibernate框架/ Spring框架

控制反转

Inversion on control 控制反转 IOC

对象的创建交给外部容器完成,这个就叫做控制反转。

依赖注入 

dependency injection

处理对象的依赖关系

区别    

控制反转:解决对象的创建问题   【对象的创建交给别人】

依赖注入:在创建完对象后,对象的关系就是依赖注入【同过set方法依赖注入】

AOP

面向切面编程。切面,简单来说来可以理解为一个类,由很多重复代码形成的类。

切面举例:事务、日志、权限;

3.Spring框架概述

1.spring框架:解决对象创建以及对象之间依赖关系的 一种框架。
    可以和其他框架一起使用,Spring与struts,spring与hibernate(起到整合作用的一个框架)。
2.spring提供了一站式解决方案:
(1)spring core  spring核心功能:IOC容器,解决对象的创建以及依赖关系
(2)spring web spring 对web 模块的支持
1.可以与struts整合,让struts的action的创建交给spring
2.spring mvc 模式
(3)spring DAO spring对jdbc 的操作的支持 【jdbcTemplate模板工具类】
(4)spring ROM spring对orm的支持
     1.既可以与hibernate整合,【session】
2.也可以使用spring对hibernate操作的封装
(5)spring AOP 切面编程
(6)spring spring 对javaEE其他模块的支持
3.开发步骤

spring各个版本中:

3.0以下的版本,源码有spring中相关的所有包【spring功能+ 依赖包】

2.5版本;

3.0以上的版本,源码中只有spring的核心功能包【没有依赖包】

(如果要用依赖包,需要单独下载!)

 

 

(1)引入jar包 源码, jar文件:spring-framework-3.2.5.RELEASE

commons-logging-1.1.3.jar           日志

spring-beans-3.2.5.RELEASE.jar        bean节点

spring-context-3.2.5.RELEASE.jar       spring上下文节点

spring-core-3.2.5.RELEASE.jar         spring核心功能

spring-expression-3.2.5.RELEASE.jar    spring表达式相关表

 

以上是必须引入的5jar文件,在项目中可以用户库管理(User library)!

(2)

 

2) 核心配置文件: applicationContext.xml  

Spring配置文件:applicationContext.xml / bean.xml

约束参考:

spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html

 

<beans xmlns="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"></beans>   

3Api

public class App {

 

// 1. 通过工厂类得到IOC容器创建的对象

@Test

public void testIOC()throws Exception {

//创建对象

// User user = new User();

//现在,把对象的创建交给springIOC容器

Resource resource =new ClassPathResource("cn/itcast/a_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("cn/itcast/a_hello/applicationContext.xml");

//从容器中获取bean

User user = (User) ac.getBean("user");

System.out.println(user);

}

}

 

 

2.3. bean对象创建的细节

 

/**

 * 1) 对象创建: 单例/多例

 * scope="singleton",默认值, 即 默认是单例service/dao/工具类】

 *  scope="prototype",多例; Action对象】

 *

 * 2) 什么时候创建?

 *   scope="prototype"  在用到对象的时候,才创建对象。

 *    scope="singleton"  在启动(容器初始化之前), 就已经创建了bean,且整个应用只有一个。

 * 3)是否延迟创建

 *   lazy-init="false"  默认为false,  不延迟创建,即在启动时候就创建对象

 *   lazy-init="true"   延迟初始化, 在用到对象的时候才创建对象

 *    (只对单例有效)

 * 4) 创建对象之后,初始化/销毁

 *   init-method="init_user"       【对应对象的init_user方法,在对象创建爱之后执行 】

 *    destroy-method="destroy_user"  【在调用容器对象的destriy方法时候执行,(容器用实现类)

 */

@Test

public void testIOC()throws Exception {

//得到IOC容器对象  【用实现类,因为要调用销毁的方法】

ClassPathXmlApplicationContext ac =new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml");

System.out.println("-----容器创建-----");

//从容器中获取bean

User user1 = (User) ac.getBean("user");

User user2 = (User) ac.getBean("user");

System.out.println(user1);

System.out.println(user2);

//销毁容器对象

ac.destroy();

}

 




原创粉丝点击