Spring的IOC和AOP

Spring简介

Spring概述:

Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架

Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护,交给Spring管理。

Spring的优点:

  • 降低了组件间的耦合,实现了应用个层次的解耦;
  • 可以使用提供的众多服务,例如事务管理、消息服务等;
  • 容器提供了单例模式;
  • 容器提供了AOP技术,很容易实现日志跟踪和权限控制等;
  • Spring对主流的框架进行了集成,例如mybatis、hibernate、structs等;
  • Spring的高度开放性,让应用可以选择不完全依赖Spring,可以自由选择部分或者全部;
Spring的目的:

就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置,内部通过反射去动态的组装对象)。Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。 Spring里用的最经典的一个设计模式就是:模板方法模式

DI原理

DI的定义:
依赖注入(Dependency Injection),有三种方式: 1) 接口注入 2) Construct注入 3) Setter注入 

IOC原理

IOC的定义:

控制反转(Inversion of Control)。应用本身不依赖对象的创建和维护,而是将这种权利交给spring容器来做,将应用和对象进行解耦。对于某个具体的对象而言,以前是对象控制其他对象,现在是所有对象都被spring容器控制,所以叫控制反转。在系统运行中,动态地向某个对象提供他所需要的对象。

IOC的实现:

依赖注入(控制反转)的思想是通过反射机制实现的(在运行时动态的去创建、调用),在实例化一个类时,通过反射调用类中的set方法将实现保存在HashMap中的类属性注入到类中。总而言之,在传统的对象创建方式中,通常由调用者来创建被调用者的实例,而在Spring中创建被调用者的工作由Spring来完成,然后注入调用者,这就是依赖注入或者控制反转。

IOC的优点:
  • 降低了组件(类)之间的耦合;
  • 倡导面向接口编程、实施依赖倒换原则;
  • 降低了业务对象之间替换的复杂性,能灵活的管理对象;

AOP原理

AOP定义:

AOP即面向切面编程,与之对应的是OOP(面向对象编程)。基于IOC,是对OOP的补充。把一些贯穿在各个模块之间相同的功能抽象出来,然后封装成一个面(aspect)。

AOP概念:
  • 连接点(JoinPoint):被拦截到的点。程序执行过程中的行为,如方法的调用或特定的异常被抛出,在代码上有JoinPoint类和ProceedingJoinPoint类,如下所示,可以通过JoinPoint获取很多参数,JoinPoint一般用在Advice实现方法中作为参数传入,ProceedingJoinPoint用于实现围绕Advice的参数传入。  通过下面JoinPoint的接口可以看出通过JoinPoint可以得到代理对象和Target对象。
  • 通知(Advice):拦截JoinPoint之前与之后要做的事;
  • 切入点(PointCut)JoinPoint进行拦截的定义;
  • 目标对象(Target):代理的目标对象;
  • 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。事务管理是一个很好的横切关注点例子。方面用Spring的Advisor或拦截器实现,可以通过@Aspect注解或者在applicationContext.xml中配置:<aop:aspect id="xxx" ref="xxx"/>
AOP使用场景:

权限控制、日志记录/跟踪、异常处理、延迟加载、事务处理等。

Spring实现AOP:
  • JDK动态代理:其代理对象必须是某个接口的实现,通过在运行期间创建一个接口的实现类来完成对目标对象的代理,核心类是InvocationHandler和Proxy;
  • CGLIB动态代理:实现原理与JDK动态代理类似,只是在运行期间生成的代理对象是针对目标类扩展的子类。CGLIB是搞笑的代码生成包,底层是ASM(Java字节码编辑类库)操作字节码实现的,性能比JDK强,需要asm.jar和cglib.jar;
  • 使用AspectJ和@AspectJ底层也是通过动态代理实现;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值