`
yejun0099
  • 浏览: 26267 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Spring_AOP基于JDK的实现原理

阅读更多

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之JDK的动态代理

    在Spring AOP中,当目标对象实现了至少一个接口时,Spring会使用JDK的动态代理来创建代理对象。这是因为JDK的动态代理只适用于实现了接口的类,它通过生成一个与目标类接口相同的新类来实现代理。这个新类在运行时被...

    spring_aop.rar_spring_aop

    通过这个实例工程,学习者可以直观地理解Spring AOP的工作原理,如何定义切面、配置通知以及如何在实际项目中应用。同时,它还能帮助开发者理解如何在不修改原始业务代码的情况下,实现通用功能的插入,提高代码的可...

    spring_AOP.rar_876.aop_java aop_spring_aop

    1. Spring_AOP_DynProxy:这可能包含有关Spring动态代理的资料,Spring使用JDK动态代理或CGLIB来创建代理对象,实现AOP的功能。 2. ch20_aop_annotation:这部分内容可能是关于使用注解来定义和实现切面的教程。 3. ...

    Spring_AOP_学习小结 Spring_AOP_学习小结 Spring_AOP_学习小结

    本篇文章将详细阐述Spring AOP的基本概念、种类、代理原理、通知类型以及切入点,帮助你深入理解这一强大的编程模式。 一、AOP概念 1. Joinpoint(连接点):在Spring AOP中,Joinpoint指的是程序执行的某个特定点...

    Spring示例_Printer_Spring_AOP_Spring_Proxy

    Spring Proxy是Spring实现AOP的一种方式,它是创建代理对象的机制。当我们的类需要被Spring管理并应用AOP时,Spring会生成一个代理类,这个代理类会在目标对象的方法调用前后执行额外的操作。代理可以是JDK动态代理...

    spring_aop1.rar_spring aop

    通过分析和学习这个案例,你可以深入理解Spring AOP的工作原理,如何在实际项目中应用AOP来提高代码的可维护性和可复用性。同时,这也是提升你的Spring框架技能和设计模式理解的一个好途径。在实践中,你可以尝试...

    spring_aop1.rar_java aop_spring mvc 例子

    在Spring中,AOP通过代理实现,可以是JDK动态代理或CGLIB代理。切面由两部分组成:切点(Pointcut)和通知(Advice)。切点定义了代码执行的特定位置,而通知则是在这些切点处执行的代码。Spring提供了注解驱动的AOP...

    spring_aop4.rar_Home Home_jar 转换_spring AOP jar

    1、如果目标对象实现了接口,默认情况下会采用JDK的动态代理实现AOP 2、如果目标对象实现了接口,可以强制使用CGLIB实现AOP 3、如果目标对象没有实现了接口,必须采用CGLIB库,spring会自动在JDK动态代理和CGLIB之间...

    spring_aop_cglib的实现方式

    在Spring AOP(面向切面编程)中,CGLIB是一个重要的动态代理库,它用于在运行时创建子类以实现对目标对象的代理。CGLIB是针对那些不支持接口代理(例如Java中的final类)的情况而设计的。下面我们将深入探讨Spring ...

    spring-aop.rar_aop1270_spring_spring aop

    本文将围绕Spring AOP的源码分析,探讨其核心概念、工作原理以及在实际开发中的应用。 一、AOP核心概念 1. 切面(Aspect):切面是关注点的模块化,通常包含一组通知(advises)和一个切入点(pointcut)定义。 2...

    Spring_Annotation_AOP

    在本资料"Spring_Annotation_AOP"中,我们将深入探讨Spring框架如何利用注解实现AOP,以及其背后的原理和实践应用。 面向切面编程(AOP)是一种编程范式,旨在提高代码的可维护性和可重用性,通过将关注点分离,...

    spring_aop_xml.rar_java aop_xml aop

    在Spring框架中,AOP主要通过两种方式实现:一种是基于代理的,另一种是基于 AspectJ 的编译时或加载时织入。在XML配置中,我们通常使用基于代理的方式,这涉及到两种类型的代理:JDK动态代理和CGLIB代理。JDK代理...

    Spring-AOP-JDK动态代理

    本篇将详细讲解Spring中的AOP实现,特别是JDK动态代理的应用。 首先,我们要了解什么是AOP(Aspect Oriented Programming,面向切面编程)。AOP是一种编程范式,旨在解决应用程序中分散的、横切关注点的问题,如...

    spring_aop

    7. **代理(Proxy)**:Spring AOP通过动态代理机制创建切面的实例,有两种代理方式:JDK动态代理(基于接口的)和CGLIB代理(无接口或接口不足时使用)。 8. **织入(Weaving)**:织入是将切面应用到目标对象并...

    学习Spring笔记_AOP_Annotation实现和XML实现

    这篇“学习Spring笔记_AOP_Annotation实现和XML实现”主要探讨了如何在Spring中利用注解和XML配置来实现AOP的概念。 AOP,全称Aspect-Oriented Programming,是一种编程范式,旨在将关注点分离,让开发者可以更专注...

    Spring_aop.rar_spring aop

    本文将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中应用。 **1. Spring AOP的基本概念** - **切面(Aspect)**:切面是封装了特定关注点的一组通知(advises)和连接点(join points)的集合。例如...

    Spring_AOP笔记Spring_AOP笔记

    - **动态代理**:在运行时创建,Spring支持JDK动态代理和CGLIB动态代理,可以为任何类创建代理,即使它没有实现接口。 在Spring AOP中,配置切面主要是在`applicationContext.xml`配置文件中完成,或者使用注解式...

    spring_aop4.rar_aop4.com

    - Spring AOP是基于动态代理实现的,它可以为普通POJO(Plain Old Java Object)提供拦截器风格的事务管理、日志记录等功能。有两种代理模式:JDK动态代理和CGLIB代理。前者适用于接口,后者用于类。 3. **切面...

    SPRING_AOP_概念解析以及例子示范.docx

    Spring AOP的四种实现方式: 1. 基于代理的经典AOP 2. @AspectJ注解驱动的切面 3. 纯POJO切面 4. 注入式AspectJ切面 示例: 创建一个Sleepable接口和Human类,Human类实现了Sleepable接口。然后创建一个SleepHelper...

Global site tag (gtag.js) - Google Analytics