Spring基础知识讲解

一.spring的作用和优势

1.创建spring的目的是为了代替更加重量级的企业级Java技术,也就是说spring提供了更加轻量级和简单的编程模型

为了降低Java的开发的复杂性,spring采取了以下4种策略:

.基于POJO的轻量级和最小侵入性编程

.通过依赖注入和面向接口实现松耦合

.基于切面和惯例进行声明式编程

.通过切面和模板减少样式代码

二.IOC和DI的区别

1.ioc:控制反转,把对象创建交给spring进行配置

2di:依赖注入,向类里面的属性中设置值

3.关系:依赖注入不能单独存在,需要在ioc的基础上完成操作

好处:做到单一职责,并提高了复用性,解耦之后,不管怎么使用接口的引用调用的方法,永远不需要改变。

三.AOP面向切面编程

好处:每个关注点都集中于一个地方,而不是分散多处代码中。其次服务模块更简洁因为他们只包含关注点的代码,而次要的关注点被转移到切面中。

AOP实现的关键在于AOP框架自动创建的AOP代理,AOP代理主要分为静态代理和动态代理,静态代理的代表为AspectJ;而动态代理则以Spring AOP为代表。

AspectJ是静态代理的增强,所谓的静态代理就是AOP框架会在编译阶段生成AOP代理类,因此也称为编译时增强。

Spring AOP使用的动态代理,所谓的动态代理就是说AOP框架不会去修改字节码,而是在内存中临时为方法生成一个AOP对象,这个AOP对象包含了目标对象的全部方法,并且在特定的切点做了增强处理,并回调原对象的方法。

Spring AOP中的动态代理主要有两种方式,JDK动态代理和CGLIB动态代理。JDK动态代理通过反射来接收被代理的类,并且要求被代理的类必须实现一个接口。JDK动态代理的核心是InvocationHandler接口和Proxy类。

aop术语:通知,连接点,切点,切面,引入,织入

4种类型的aop

。基于代理的经典springAOP(笨重复杂)

。纯POJO切面(需要xml配置)

。@AspectJ注解驱动切面(可以不使用xml)

。注入式AspectJ切面(超过简单方法调用(构造器或属性拦截))

前三种是springAop实现的变种。

spring使用AspectJ注解来声明通知方法

@After   通知方法会在目标方法返回或抛出异常后调用

@AfterReturning    通知方法会在目标方法返回后调用

@AfterThrowing       通知方法会在目标方法抛出异常后调用

@Around                  通知方法会在目标方法封装起来

@Before             通知方法会在目标方法调用之前执行

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(Spring基础知识讲解)