Spring Aop 面向切面编程:
动态代理模式
被代理类:
package com.aowin.structure.proxy.dynamicproxy;
public interface SaleTicket {
void sale();
}
代理类:
package com.aowin.structure.proxy.dynamicproxy;
public class Station implements SaleTicket{
public void sale() {
System.out.println("sale a ticket.....");
}
}
拦截器:
package com.aowin.structure.proxy.dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
//代理行为
public class MyInvocationHandler implements InvocationHandler{
//station对象
private Object target ;
public MyInvocationHandler(Object target) {
super();
this.target = target;
}
public Object invoke(Object proxy, Method method, Object[] args)
throws Throwable {
System.out.println("in proxy method....");
System.out.println("pay 5 yuan tip fee.....");
Object obj = method.invoke(target, args); //通过反射机制调用目标对象的方法
return obj;
}
}
进行切面操作业务逻辑:
package com.aowin.structure.proxy.dynamicproxy;
import java.lang.reflect.Proxy;
public class Test {
public static void main(String[] args) {
//目标对象
Station target = new Station();
//代理行为
MyInvocationHandler mih = new MyInvocationHandler(target);
//代理对象
SaleTicket proxy = (SaleTicket) Proxy.newProxyInstance(Test.class.getClassLoader(),
target.getClass().getInterfaces(), mih);
//待用代理对象的方法,JVM将执行代理行为的invoke方法
proxy.sale();
System.out.println("done");
}
}
分享到:
相关推荐
在Spring AOP中,当目标对象实现了至少一个接口时,Spring会使用JDK的动态代理来创建代理对象。这是因为JDK的动态代理只适用于实现了接口的类,它通过生成一个与目标类接口相同的新类来实现代理。这个新类在运行时被...
通过这个实例工程,学习者可以直观地理解Spring AOP的工作原理,如何定义切面、配置通知以及如何在实际项目中应用。同时,它还能帮助开发者理解如何在不修改原始业务代码的情况下,实现通用功能的插入,提高代码的可...
1. Spring_AOP_DynProxy:这可能包含有关Spring动态代理的资料,Spring使用JDK动态代理或CGLIB来创建代理对象,实现AOP的功能。 2. ch20_aop_annotation:这部分内容可能是关于使用注解来定义和实现切面的教程。 3. ...
本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你深入理解这一强大的编程模式。 一、AOP概念 1. Joinpoint(连接点):在Spring AOP中,Joinpoint指的是程序执行的某个特定点...
Spring Proxy是Spring实现AOP的一种方式,它是创建代理对象的机制。当我们的类需要被Spring管理并应用AOP时,Spring会生成一个代理类,这个代理类会在目标对象的方法调用前后执行额外的操作。代理可以是JDK动态代理...
通过分析和学习这个案例,你可以深入理解Spring AOP的工作原理,如何在实际项目中应用AOP来提高代码的可维护性和可复用性。同时,这也是提升你的Spring框架技能和设计模式理解的一个好途径。在实践中,你可以尝试...
在Spring中,AOP通过代理实现,可以是JDK动态代理或CGLIB代理。切面由两部分组成:切点(Pointcut)和通知(Advice)。切点定义了代码执行的特定位置,而通知则是在这些切点处执行的代码。Spring提供了注解驱动的AOP...
1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间...
在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...
本文将围绕Spring AOP的源码分析,探讨其核心概念、工作原理以及在实际开发中的应用。 一、AOP核心概念 1. 切面(Aspect):切面是关注点的模块化,通常包含一组通知(advises)和一个切入点(pointcut)定义。 2...
在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...
在Spring框架中,AOP主要通过两种方式实现:一种是基于代理的,另一种是基于 AspectJ 的编译时或加载时织入。在XML配置中,我们通常使用基于代理的方式,这涉及到两种类型的代理:JDK动态代理和CGLIB代理。JDK代理...
本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...
7. **代理(Proxy)**:Spring AOP通过动态代理机制创建切面的实例,有两种代理方式:JDK动态代理(基于接口的)和CGLIB代理(无接口或接口不足时使用)。 8. **织入(Weaving)**:织入是将切面应用到目标对象并...
这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...
本文将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中应用。 **1. Spring AOP的基本概念** - **切面(Aspect)**:切面是封装了特定关注点的一组通知(advises)和连接点(join points)的集合。例如...
- **动态代理**:在运行时创建,Spring支持JDK动态代理和CGLIB动态代理,可以为任何类创建代理,即使它没有实现接口。 在Spring AOP中,配置切面主要是在`applicationContext.xml`配置文件中完成,或者使用注解式...
- Spring AOP是基于动态代理实现的,它可以为普通POJO(Plain Old Java Object)提供拦截器风格的事务管理、日志记录等功能。有两种代理模式:JDK动态代理和CGLIB代理。前者适用于接口,后者用于类。 3. **切面...
Spring AOP的四种实现方式: 1. 基于代理的经典AOP 2. @AspectJ注解驱动的切面 3. 纯POJO切面 4. 注入式AspectJ切面 示例: 创建一个Sleepable接口和Human类,Human类实现了Sleepable接口。然后创建一个SleepHelper...