初始Spring(一)

来源:互联网 发布:人工智能先驱 编辑:程序博客网 时间:2024/06/02 19:43

Spring知识点梳理:

Spring的优势:

(1)通过IOC帮助开发者管理,维护对象;

(2)通过AOP,帮助开发者统一业务逻辑之外的功能代码,如:记录日志,检查权限等;

(3)提供了一组API和配置方式来帮助我们简化事务管理;

(4)方便集成其它框架,如Struts,Hibernate、Hessian、Quartz的直接集成;

(5)对很多Java EE API(如JDBC,JavaMail,远程调用)进行了简易封装,降低这些API的使用难度。

 

  

  1. Spring框架引入

Struts与Hibernate可以做什么事?

Struts:

MVC中控制层解决方案 :可以进行请求数据自动封装、类型转换、文件上传、效验…;

Hibernate:

持久层的解决方案:可以做到,把对象保存到数据库, 从数据库中取出的是对象;

  1. 传统开发的模式
    1. 基于mvc模式进行项目开发,项目结构为:

      domain(实体类) / dao / service / action

    2. 那么传统开发模式的开发流程和执行流程是什么样的呢?

// 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返回结果--->

服务器返回给浏览器响应结果

  1. 问题:
    1. 对象创建能否写死:

      不能,如果写死不利于维护,以及程序的拓展;

      如何解决呢?

      可以将实例化对象写入到配置文件中,然后利用"工厂"来创建

    2. 对象创建细节

对象数量:

action

多个,因为web项目是并发访问项目,每次访问都要创建【维护成员变量】

service

一个,没有必要为每次访问的对象创建一个新的业务逻辑 【不需要维护公共变量】

dao

一个 ,同上 【不需要维护公共变量】

创建时间:

action

访问时候创建

service

启动时候创建

dao

启动时候创建

  1. 对象的依赖关系

action 依赖

service

service依赖

dao

  1. 总结

    spring可以解决如上问题

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

  1. Spring相关信息
    1. Spring框架的主页:http://www.springsource.org/
    2. Spring框架下载地址:http://www.springsource.org/download
  2. Spring特点
    1. 利用控制反转(IOC)和面向切面(AOP)来构架多层JavaEE系统的框架,可以简化企业开发;
    2. Spring是一个分层的JavaSE/EE(一站式) 轻量级开源框架;
    3. Spring是非侵入式设计,可在适当时安装或卸载Spring。
  3. 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其他模块的支持

  

  1. 专业术语了解
  • 组件/框架设计
    • 侵入式设计:引入的框架,对现有的类的结构有影响;即需要实现或继承某些特定类。

      例如:        Struts框架;

    • 非侵入式设计:引入了框架,对现有的类结构没有影响。

      例如:Hibernate框架 / Spring框架;

  • 控制反转(IOC):去撩闲-->IOC与DL,或者调戏一下御姐-->IOC到底是什么?
    • spring核心,对象的创建交给外部容器完成,就是控制反转.
  • AOP:去撩闲-->AOP
    • 面向切面编程。切面,简单来说来可以理解为一个类,由很多重复代码形成的类。

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

  • 容器
    • 包含并管理应用对象的配置和生命周期,但不同于传统的重量级EJB容器。
  • 框架
    • Spring可将简单的组件配置、组合成为复杂的应用。例如,在一个XML文件里应用对象被声明式地组合;
    • Spring也提供了很多基础功能(事务管理、持久化框架集成等等)。
  • MVC
    • Spring的作用是整合,但不局限于此,可被看做是一个企业级解决方案的框架。
  1. Spring开发步骤

1.首先要注意,在spring各个版本中:

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

如2.5版本;

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

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

  

2. 源码:

Spring jar包:spring-framework-3.2.5.RELEASE(压缩包)

以下是必须引入的5个jar文件,建议使用用户库进行管理

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表达式相关表

  

3.设定配置文件:

核心配置文件: applicationContext.xml

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

  

约束参考:

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

Spring基本约束头:

<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">

</beans>

  

4.Spring常用API:

1.得到IOC容器对象

ApplicationContext ac = new ClassPathXmlApplicationContext("配置文件路径");

2.从容器中获取bean

ac.getBean("配置文件的id");

  1. 加载Spring配置文件的几种方式

方式一:在类路径下寻找配置文件来实例化容器,详细说明:主要实现类

1ApplicationContext ctx=newClassPathXmlApplicationContext(new String[]{"beans.xml"});

(2)ApplicationContext context=new ClassPathXmlApplicationContext("beans.xml");

UserDao userDao=(UserDao)context.getBean("userDao");

可以在整个类路径中寻找xml文件:

* 通过这种方式加载。需要将spring的配置文件放到当前项目的classpath路径下;

* classpath路径指的是当前项目的src目录,该目录是java源文件的存放位置

方式二:在文件系统路径下寻找配置文件来实例化容器,详细说明:主要实现类

ApplicationContext context=new FileSystemXmlApplicationContext("C:/conf/applicationContext.xml");

UserDao userDao = (UserDao) context.getBean("userDao");

利用指定的相对路径或者绝对路径来读取配置文件。

方式三:利用ClassPathResource,详细说明:Resource的具体实现类

Resource cr = new ClassPathResource("applicationContext.xml");

BeanFactory bf=new XmlBeanFactory(cr);

UserDao userDao = (UserDao)bf.getBean("userDao");

  1. 从Spring容器获取bea
    1. 当spring容器启动后,spring容器可管理bean对象的创建、销毁等生命周期,只需从容器直接获取Bean对象,而不用编写代码来创建bean对象。
    2. 两种方式:

通过工厂类得到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");

  1. 第一个示例

//举个栗子,此栗使用无参构造方法:无参构造方法创建对象
public class 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();老式创建方式

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

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>

 

0 0