首页 > 代码库 > Spring(一):概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试

Spring(一):概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试

1 Spring框架的学习路线

Spring第一天:IOC容器(Bean管理),Spring与Web项目整合

Spring第二天:AOP(面向切面编程),Spring的JDBC模板

Spring第三天:Spring的事务管理,SSH整合开发

2 Spring的框架概述

2.1 什么是Spring

Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。

EE开发分成三层结构: 

  WEB层:Spring MVC

  业务层:Bean管理:(Spring IOC) 

  持久层:Spring的JDBC模板,ORM模板用于整合其他的持久层框架

相关书籍: 

  Expert One-to-One J2EE Design and Development:J2EE的设计和开发(2002.EJB) 

  Expert One-to-One J2EE Development without EJB:J2EE不使用EJB的开发(@interface21)

2.2 为什么学习Spring

  • 方便解耦,简化开发:Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
  • AOP编程的支持:Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
  • 声明式事务的支持:只需要通过配置就可以完成对事务的管理,而无需手动编程
  • 方便程序的测试:Spring对Junit4支持,可以通过注解方便的测试Spring程序
  • 方便集成各种优秀框架:Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
  • 降低JavaEE API的使用难度:Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低

2.3 Spring的版本

Spring 3.X 和 Spring4.X

3 SpringIOC入门案例

3.1 快速搭建Spring项目

步骤一:下载Spring的开发jar包

http://repo.spring.io/webapp/search/artifact/?0&q=spring-framework 

解压(Spring目录结构) 

  docs:API和开发规范 

  libs:jar包和源码

  schema:约束

步骤二:创建web项目,引入Spring IOC开发包

IOC:Inverse of Control,控制反转,将对象的创建权反转给Spring

Spring IOC的核心内容:

技术分享

引入jar包(符合上述IOC开发相关的jar包就行了,再加上日志记录相关两个jar包):

技术分享

注:hibernate中的Slf4j包不做具体的日志记录,只是用于整合其他日志jar包。

步骤三:创建包结构,编写接口和实现类

技术分享

技术分享

步骤四:创建Spring的配置文件

首先在src目录下创建Spring的配置文件:applicationContext.xml。 

然后引入spring的约束(spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\xsd-config.html的最下面copy)。 

最后完成bean配置。

<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframework.org/schema/beans"       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">    <!-- Spring的快速入门=================== -->    <bean id="userService" class="com.itheima.spring.demo1.UserServiceImpl">        <!--属性依赖注入-->        <property name="name" value="老王(XML)"/>    </bean></beans>

步骤五:编写测试程序

新建SpringDemo1类:

@Test/** * 传统方式开发: */public void demo1(){    UserServiceImpl userService = new UserServiceImpl();    // 手动设置:    userService.setName("老王");    userService.sayHello();}@Test/** * Spring框架开发: */public void demo2(){    // 使用Spring的工厂:    ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");    // 通过工厂获得类:    UserService userService = (UserService) applicationContext.getBean("userService");    userService.sayHello();}

3.2 控制反转(IOC)和依赖注入(DI)

IOC:控制反转,将对象的创建权反转给Spring。

DI:依赖注入,必须将对象的创建权交给Spring,将对象所依赖的属性注入进来.

3.2.1 面向对象开发中类的三种关系

依赖(A依赖B):

public class A{    private B b;    public void setB(B b){        this.b = b;    }}

继承:is a

聚合:has a。又分松散聚合关系与紧密聚合关系。

3.3 Spring的工厂

3.3.1 ApplicationContext

ApplicatioContext接口有两个实现类:

技术分享

ClassPathXmlApplicationContext:加载类路径下Spring的配置文件

FileSystemXmlApplicationContext:加载本地磁盘下Spring的配置文件

/** * Spring框架开发:读取本地磁盘配置文件 */public void demo3(){    // 使用Spring的工厂:    ApplicationContext applicationContext = new FileSystemXmlApplicationContext("C:\\applicationContext.xml");    // 通过工厂获得类:    UserService userService = (UserService) applicationContext.getBean("userService");    userService.sayHello();}

关闭工厂的方法只有其子类中才有:

技术分享

3.3.2 BeanFactory

技术分享

3.3.3 ApplicationContext和BeanFactory的区别

ApplicationContext:在加载applicationContext.xml时就会创建类的实例

BeanFactory:是在调用getBean方法时才会生成类的实例

技术分享

 

Spring(一):概述,IOC(Bean管理),整合Web项目,整合JUnit单元测试