Spring介绍
1、Spring是什么?
1.1、概述
(1)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/EE full-stack(一站式) 轻量级开源框架。
(2)轻量级:与EJB对比,依赖资源少,销毁的资源少。
(3)分层: 一站式,每一个层都提供的解决方案
web层:struts,spring-MVC
service层:spring
dao层:hibernate,mybatis ,jdbcTemplate --> spring-data
1.2、spring体系结构
核心容器:beans、core、context、expression
1.3、Spring的核心是控制反转(IoC)和面向切面(AOP)
1.4、AOP
1.4.1、什么是AOP
(1)在软件业,AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP(面向对象编程)的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
(2)AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码
(3)经典应用:事务管理、性能监视、安全检查、缓存 、日志等
(4)Spring AOP使用纯Java实现,不需要专门的编译过程和类加载器,在运行期通过代理方式向目标类织入增强代码
(5)AspectJ是一个基于Java语言的AOP框架,Spring2.0开始,Spring AOP引入对Aspect的支持,AspectJ扩展了Java语言,提供了一个专门的编译器,在编译时提供横向代码的织入
1.4.2、AOP实现原理
(1)aop底层将采用代理机制进行实现。
(2)接口 + 实现类 :spring采用 jdk 的动态代理Proxy。
(3)实现类:spring 采用 cglib字节码增强。
1.4.3、AOP术语【掌握】
(1)target:目标类,需要被代理的类。例如:UserService
(2)Joinpoint(连接点):所谓连接点是指那些可能被拦截到的方法。例如:所有的方法
(3)PointCut 切入点:已经被增强的连接点。例如:addUser()
(4)advice 通知/增强,增强代码。例如:after、before
(5)Weaving(织入):是指把增强advice应用到目标对象target来创建新的代理对象proxy的过程.
(6)proxy 代理类
(7)Aspect(切面): 是切入点pointcut和通知advice的结合
一个线是一个特殊的面。
一个切入点和一个通知,组成成一个特殊的面。
2、为什么要用Spring?
(1)方便解耦,简化开发 (高内聚低耦合)
Spring就是一个大工厂(容器),可以将所有对象创建和依赖关系维护,交给Spring管理
spring工厂是用于生成bean
(2)AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
(3)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程
(4)方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序
(5)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
(6)降低JavaEE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
3、Spring怎么用?
笔记02_P287
例题:spring_day01
3.1、入门案例:IoC【掌握】
(1)导入jar包
包:4个核心(beans、core、context、expression) + 1个依赖(commons-loggins...jar)
(2)目标类
提供UserService接口和实现类
获得UserService实现类的实例
之前开发中,直接new一个对象即可。
学习spring之后,将由Spring创建对象实例--> IoC控制反转(Inverse of Control)
之后需要实例对象时,从spring工厂(容器)中获得,需要将实现类的全限定名称配置到xml文件中
(3)配置文件
位置:任意,开发中一般在classpath下(src)
名称:任意,开发中常用applicationContext.xml
内容:添加schema约束
约束文件位置:spring-framework-3.2.0.RELEASE\docs\spring-framework-reference\html\ xsd-config.html
(4)测试
3.2、入门案例:DI【掌握】
(1)目标类
创建BookService接口和实现类
创建BookDao接口和实现类
(2)配置文件
将dao和service配置 xml文件
(3)测试
使用api测试
4、补充:
(1)IoC:控制反转(Inverse of Control)。
将创建对象的控制权反转给spring,意思是以后用spring来创建对象。
(2)DI:依赖注入(Dependency Injection)。
is a :是一个,继承。
has a:有一个,成员变量,依赖。
class B {
private A a; //B类依赖A类
}
依赖:一个对象需要使用另一个对象。
注入:通过setter方法进行另一个对象实例设置。