关注我,带了熟悉Java趣事,Java进阶攻略等着你
一、简介
Spring 是个开源分层的框架,其目的是用于简化企业级应用程序开发,减少侵入。它是由两个核心部分组成,IOC和AOP。
##二、IOC
IOC:称为控制反转,也就是将对象的创建权(控制权),交给Spring管理。IOC也有个名字称为DI,也就是依赖注入,之所所以这么说,在spring创建对象的过程中,把对象依赖的属性注入到类中
IOC简介
IOC,称为控制反转,控制的是什么,谁控制谁,之前没有控制反转的时候,我们在java EE 开发过程中,我们直接在对象内部通过new创建对象,是通过程序主动去创建依赖关系,而IOC是有一个专门的容器来创建对象,也就是IOC容器来控制对象的创建。谁控制谁,当然是由IOC容器控制了对象。控制的什么,主要控制了外部资源获取
● **谁控制于谁:**IOC容器控制了对象,控制了外部资源获取(包括对象、资源、常量数据)
● **反转了什么:**依赖对象由IOC容器来帮忙创建及注入
DL简介
IOC也称为DL(依赖注入):依赖注入其实是与IOC同一个概念的不同角度描述,是由容器动态的将某个依赖关系注入到组件之中。当然是应用程序依赖与IOC容器,应用程序需要IOC容器来提供对象的外部资源
●**谁依赖于谁:**当然是应用程序依赖于IoC容器;
●**为什么需要依赖:**应用程序需要IoC容器来提供对象需要的外部资源;
●**谁注入谁:**很明显是IoC容器注入应用程序某个对象,应用程序依赖的对象;
**●注入了什么:**就是注入某个对象所需要的外部资源(包括对象、资源、常量数据)
##三、AOP
###1、什么是AOP
AOP(Aspect Oriented Programming):面向切面编程,在程序运行时,动态的将代码切入到的指定的方法、指定的位置的编程思想就是面向切面编程。主要目的把核心业务与非核心业务进行分离。让核心类做核心业务,让代理类只做非核心任务(比如事物管理,日记管理,乱码处理等等),通过切面切入系统, 更加体现出来AOP无侵入性、降低代码之间的耦合度、提高了程序可重用性、同时也提高了开发效率 的特性。
###2、应用场景
AOP它是Spring提供的关键性特性之一,AOP即是面向切面编程,是OOP编程有效补充,使用AOP技术,可以将一些程序相关的一些编程工作,独立提取出来,独立实现,然后通过切面切入进入系统,从而避免了业务逻辑之间混入很多程序相关的逻辑(比如事物管理,日记管理,乱码处理等等),同时达到了将不同的关注点分离出来的效果。更加体现出来AOP无侵入性的特性。
3、AOP组成部分
- Aspect(切面):切入系统的一个切面,比如事物管理是一个切面,权限管理也是一个切面
- join point(连接点):也就是可以进行横向切入的位置
- Advice(织入/通知):切面在某个连接点执行操作
- before( 前置通知 ):在方法执行之前进行操作
- fter-returning(后置通知):在方法执行之后进行操作,并正常能够获取返回值
- around( 环绕通知 ): 在方法执行之前进行操作,在方法执行之后进行操作,正常能够获取返回值
- throwing(异常通知):在方法出现异常之后,进行操作
- after(最终通知): 不管目标方法是否遇到异常,最终通知都将执行
- pointcut(切点):符合切点表达式的连接点,也就是真正被切人的地方
4、AOP代理模式
- 介绍:AOP代理模式就是把某个对象委托给代理类,通过代理类去访问目标对象,分为静态AOP和动态AOP
- AOP静态代理:若代理类在程序运行前就已经存在了,这种代理方式称为静态代理。静态代理类通常在我们java类中定义的,静态代理中的代理类与委托类会实现同一接口或者是派生来自相同的父类
- 优点与缺点
- 优点:可以实现客户与委托类之间的解耦,在不修改委托类代码情况下能够做些额外的处理。
- 缺点:静态代理的局限在于运行前必须要编写好代理类
- 优点与缺点
- AOP动态代理:代理类是在程序运行时创建的代理方式被称为动态代理,也就是动态代理类不是在java代码中定义的,而已根据我们运行java代码中的指示而动态生成的,spring的AOP动态代理,实现技术有两种:JDK提供的动态代理技术和CGLIB(code generate libary–>动态字节码增强技术),尽管技术不一样,但都是基于代理模式,都是生成一个代理对象
四、Spring 的核心模块
Spring框架是一个分层的架构,主要由7个模块组成的
- spring-core :核心容器,用来管理bean,创建,装配,销毁等功能。
- spring-context:applicationContext容器,扩展核心容器,提供事件处理、国际化等功能,它提供了一些企业级服务的功能,提供了JNDI,EJB,RMI的支持。
- Spring-AOP:提供切面支持
- Spring-DAO:提供事务支持,JDBC,DAO支持
- Spring-ORM:对流行的O/R Mapping封装或支持
- Spring-mvc:提供Web应用上下文,对Web开发提供功能上的支持,如请求,表单,异常等。
- Spring-Web MVC:全功能MVC框架,作用等同于Struts2