`
ynp
  • 浏览: 437908 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

动态代理模式(AOP的JDK实现原理)

阅读更多
* 模拟了给方法加入事务过程
接口------>
package com.xx.service;

public interface ProductService {
	public void save();
	public void get();
	public void update();
}


实现类------>
package com.xx.service.impl;

import com.xx.service.ProductService;

public class ProductServiceBean implements ProductService {

	public void get() {
		System.out.println("这是get方法");
	}

	public void save() {
		System.out.println("这是save方法");
	}

	public void update() {
		System.out.println("这是update方法");
	}

}


动态代理类工厂------>
package com.xx.proxyFactory;

import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;

import com.sun.corba.se.spi.orbutil.fsm.Guard.Result;
import com.sun.org.apache.bcel.internal.generic.NEW;
import com.xx.service.ProductService;
import com.xx.service.impl.ProductServiceBean;
/**
 * 执行过程 
 * 1 传入目标对象;
 * 2、根据目标对象生成代理对象;
 * 3、代理对象的方法是目标对象的方法经过invoke方法返回的代理方法,
 * 4、返回代理对象,客户端调用的方法是代理方法(相当于把目标对象的方法单独处理了一下);
 *
 */
public class ProxyFactory implements InvocationHandler {
	private Object tarObject;//目标对象
	public Object getPropxy(Object targetObj){
		this.tarObject = targetObj;
		//生成代理对象
		return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), 
				                      targetObj.getClass().getInterfaces(), 
				                      this);
	}
	
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
	    Object result = null; //代理的方法,并将代理方法返回
    	before();
		result = method.invoke(tarObject, args);
		end();
		return result;
	}

	public void before(){
		System.out.println("-------事务开始--------");
	}
	
	public void end(){
		System.out.println("-------事务结束--------");
	}
}


客户端------>
package junit.test;


import org.junit.BeforeClass;
import org.junit.Test;

import com.xx.proxyFactory.ProxyFactory;
import com.xx.service.ProductService;
import com.xx.service.impl.ProductServiceBean;

public class TestProduct {

	@BeforeClass
	public static void setUpBeforeClass() throws Exception {
	}
	
	@Test
	public void testGet(){
		ProductService productService = (ProductService)new ProxyFactory().getPropxy(new ProductServiceBean());
		productService.get();
	}
}
分享到:
评论

相关推荐

    反射实现 AOP 动态代理模式(Spring AOP 的实现原理)

    这种通过代理模式实现的AOP方法,可以很好地将业务逻辑代码与额外的横切关注点分离,使得代码更加清晰,易于维护。如果将来需要去除日志记录功能,只需要替换掉代理类的实例,而不需要修改任何业务逻辑代码。此外,...

    Aop jdk proxy实现小例子

    JDK Proxy是Java提供的一种动态代理机制,它是实现AOP的一种方式。通过JDK Proxy,我们可以在运行时创建一个接口的实现类,并在调用接口方法时插入自定义的处理逻辑,这就是AOP的核心思想——“织入”(Weaving)。...

    使用动态代理演示Spring的AOP编程原理

    为了说明Spring的AOP原理,本人使用代理模式中的动态代理完成演示AOP编程的原理的演示。相信,如果你耐心看完整个程序(几乎一行注释一行代码),那么你对Spring这个东西就不是觉得有什么神秘了! 阅读对象:凡是喜爱...

    模拟spring aop【一】基于jdk动态代理实现的aop

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者定义“切面”,...通过理解JDK动态代理的工作原理和Spring AOP的相关概念,我们可以更好地利用这一强大功能,提升应用程序的可维护性和灵活性。

    Jdk动态代理和cglib动态代理原理

    在实际开发中,如Spring AOP框架就同时支持JDK和CGLIB动态代理,根据目标类是否实现接口自动选择合适的代理方式。 总结来说,JDK动态代理和CGLIB动态代理都是为了在运行时提供对目标对象的增强,它们通过不同的实现...

    java 动态代理实例(JDK代理与CGLIB代理)

    Java动态代理是Java编程中一个重要的特性,它允许我们在运行时创建对象的代理,从而可以在不修改原有代码的情况下,对原有...同时,它也是设计模式中的代理模式的一种实现,有助于解耦系统组件,使代码结构更加清晰。

    java-用Java动态代理实现AOP.pdf

    在Java中实现AOP可以通过动态代理模式,其中Java动态代理是一个非常重要的实现方式。 Java动态代理机制要求被代理的类必须实现至少一个接口,因为Java动态代理是通过JDK的java.lang.reflect.Proxy类和java.lang....

    Java JDK 实现AOP

    ### Java JDK 实现AOP详解 #### AOP的起源与发展 面向方面编程(Aspect-Oriented ...Java JDK 提供了强大的工具支持AOP的实现,通过学习并实践上述示例,开发者可以更好地理解AOP的工作原理及其在实际场景中的应用。

    jdk与cglib动态代理与底层实现

    JDK和CGLIB是Java中实现动态代理的两种主要方式,它们在Spring框架中扮演着关键角色,尤其是在AOP(面向切面编程)中。 1. **JDK动态代理**: JDK动态代理基于Java的接口机制实现,因此,要使用JDK动态代理,被...

    AOP的实现机制.

    总结来说,AOP的实现机制主要涉及切面、连接点、通知等概念,以及静态代理和动态代理的实现方式。在Spring框架中,AOP通过代理类和切点匹配来实现通知的自动插入,从而达到关注点分离的效果,提高了代码的可维护性和...

    aop的工作原理

    **AOP(面向切面编程)**...Spring AOP提供了动态和静态两种代理方式,以及丰富的通知类型,方便我们在系统中灵活地实现切面逻辑,如日志记录。通过理解并熟练运用AOP,可以更好地设计和构建高效、整洁的Java应用程序。

    jdk与cglib动态度代理的区别原理

    在Java编程领域,动态代理是一种常见的设计模式,用于在运行时创建对象的代理,以便在调用实际目标方法之前或之后插入额外的行为。主要存在两种常见的动态代理技术:JDK动态代理和CGLIB(Code Generation Library)...

    深入浅析Spring AOP的实现原理1

    Spring AOP主要基于两种代理模式来实现:静态代理和动态代理。 1. 静态代理: 在静态代理中,代理类和目标类需要实现相同的接口,代理类持有目标类的引用,并在调用目标类方法前后添加额外的逻辑,比如日志记录。...

    Spring 代理 Aop 实现原理讲解.docx

    Spring AOP通过代理模式来实现切面的插入。 2. **基于XML的AOP实现** 在XML配置中,可以通过`<aop:config>`标签定义切面,`<aop:pointcut>`定义连接点,`<aop:advisor>`或`<aop:aspect>`定义通知。通过`<aop:...

    JDK动态代理简单示例

    除了基本的代理实现,JDK动态代理还可以结合其他设计模式,如工厂模式,创建更加复杂的代理对象。此外,Spring框架中的AOP功能也是基于JDK动态代理或CGLIB实现的,它允许开发者定义切面,对满足特定条件的方法进行...

    SpringAOP之探秘(动态代理、责任链模式、注解使用)

    学习这些示例,你可以更深入地理解Spring AOP的工作原理,掌握如何使用动态代理和责任链模式来编写切面,以及如何通过注解简化AOP的配置和使用。这些知识对于任何涉及Spring框架的开发者来说都是至关重要的,因为...

    代理模式(含动态代理讲解)【Spring AOP实质】

    在Java中,代理模式有两种实现方式:静态代理和动态代理。 **静态代理** 在静态代理中,我们需要创建一个代理类,该类与被代理类具有相同的接口,以便在代理类中调用被代理类的方法。代理类中通常会添加额外的功能...

    Java JDK动态代理实现原理实例解析

    InvocationHandler接口中仅定义了一个方法Object invoke(Object obj,Method method,Object[] args),该方法在代理类中动态实现。在实际使用时,第一个参数obj一般是指代理类,method是被代理的方法,args为该方法的...

Global site tag (gtag.js) - Google Analytics