主页 > 电脑硬件  > 

Spring框架-AOP

Spring框架-AOP
1. 代理模式

为某一个对象(委托类)提供一个代理(代理类),用来控制对这个对象的访问。委托类和代理类有一个共同的父类或父接口。

代理类会对请求做预处理、过滤、将请求分配给指定对象。

生活中常见的代理模式:

        房东委托中介出租房子

        婚庆公司

代理模式的两个设计原则:

1. 代理类与委托类具有相似的香味

2. 代理类增强委托类的行为

常见的代理模式:

静态代理

动态代理

 代理的三要素:

有共同的行为 - 定义接口

目标角色/真实角色(新人)- 实现接口

代理角色 - 实现接口 增强用户行为

2. 静态代理的特点

1. 目标角色固定

2. 在应用程序之前就得知目标角色

3. 代理对象会增强目标对象的行为

4. 有可能存在多个代理,产生“类爆炸”(缺点)

3. 动态代理

        相比于静态代理,动态代理在创建代理对象上更加的灵活,动态代理类的字节码在程序运行时,由Java反射机制动态产生。它会根据需要,通过反射机制在程序运行期,动态的为目标对象创建代理对象,无需程序员手动编写它的源代码。动态代理不仅简化了编程工作,而且提高了软件系统的可扩展性,因为反射机制可以生成任意类型的动态代理类。代理的行为可以代理多个方法,既满足生产需要的同时又达到代码通用的目的。

        动态代理的两种实现方式:

                1. JDK动态代理

                2. CGLIB动态代理

3.1 动态代理的特点

1. 目标对象不固定

2. 在程序运行时,动态创建目标对象

3. 代理对象会增强目标对象的行为

3.2 JDK动态代理 3.2.1 newProxyInstance

Proxy类:Proxy类是专门完成代理的操作类,可以通过此类为一个或多个接口动态地生成实现类,此类提供了如下操作方法:

/* 返回一个指定接口的代理类的实例方法调用分派到指定的调用处理程序。(返回代理对象) loader: 一个ClassLoader对象,定义了由哪个ClassLoader对象来对生成的代理对象进行加载 interfaces: 一个Interface对象的数组,表示的是我将要给我需要代理的对象提供一组什么接口,如果我 提供了一组接口给它,那么这个代理对象就宣城实现了该接口(多态),这样我就能调用这组接口中的方法了 h: 一个InvocationHandler接口,表示代理实例的调用处理程序实现的接口。每个代理实例都具有一个关联的调用处理程序。对代理实例调用方法时,将对方法调用进行编码并将其指派到它的调用处理程序的invoke方法 */ public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) 4. Spring AOP 4.1 什么是AOP

        Aspect Oriented Programming 面向切面编程,相比较OOP面向对象编程来说,AOP关注的不再是程序代码中某个类,某些方法,AOP考虑更多的是一种面到面的切入,即层与层之间的一种切入,所以称之为切面。

4.2 AOP能做什么

AOP主要应用于日志记录,性能统计,安全控制,事务处理等方面,实现公共功能性的重复使用

4.3 AOP的特点

1. 降低模块与模块之间的耦合度,提高业务代码的聚合度。(高内聚低耦合)

2. 提高了代码的复用性

3. 提高系统的扩展性

4. 可以在不影响原有的功能基础上添加新的功能

4.4 AOP的底层实现

动态代理(JDK+CGLIB)

5. Spring AOP 环境搭建

5.1 坐标依赖引入

5.2 添加spring.xml的配置

标签:

Spring框架-AOP由讯客互联电脑硬件栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Spring框架-AOP