`
only1
  • 浏览: 21815 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

java动态代理实现AOP

    博客分类:
  • java
阅读更多

AOP一直感觉很神秘,记得第一看到这个名词,这个是什么东东呀。

文字不写了,直接代码

 

 IBusiness接口类

package com.aop.proxy;

public interface IBusiness {
	
	public void process();
	
	public void process1();

}

 

Business实现类

package com.aop.proxy;

public class BusinessImpl implements IBusiness {

	public void process() {
		System.out.println("执行业务");
	}
	
	
	public void process1() {
		System.out.println("执行业务1");
	}

}

 

 

 

拦截器LogIntercptor 类

package com.aop.proxy;

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

public class LogInterceptor implements InvocationHandler {
	
	private Object delegate;
	
	public LogInterceptor(Object delegate){
		this.delegate=delegate;
	}

	public Object invoke(Object obj, Method method, Object[] arg2)
			throws Throwable {
		Object result=null;
		try{
			System.out.println("Before process:"+method);
			//在这里,可以实现对方法访问权限的简单控制
			if(method.getName().equals("process1")){
				result=method.invoke(delegate, arg2);
			}
			System.out.println("After process:"+method);
			
		}
		catch(Exception e){
			System.out.println("发生异常");
		}
		return result;
	}

}

 

 

测试用例

package com.aop.proxy;

import junit.framework.TestCase;
import java.lang.reflect.*;

public class TestAOP extends TestCase {
	
	public void testAOP(){
		IBusiness obj=new BusinessImpl();
		LogInterceptor interceptor=new LogInterceptor(obj);
		
		IBusiness proxy=(IBusiness)Proxy.newProxyInstance(BusinessImpl.class.getClassLoader(),
				BusinessImpl.class.getInterfaces(),
				interceptor);
		proxy.process();
		proxy.process1();
	}

}

 

 运行 结果:

Before process:public abstract void com.aop.proxy.IBusiness.process()
After process:public abstract void com.aop.proxy.IBusiness.process()
Before process:public abstract void com.aop.proxy.IBusiness.process1()
执行业务1
After process:public abstract void com.aop.proxy.IBusiness.process1()

 

 

 

 

分享到:
评论

相关推荐

    用Java动态代理实现AOP

    Java动态代理实现AOP Java动态代理是实现Aspect Oriented Programming(AOP)的重要手段。在Java中,动态代理可以通过java.lang.reflect InvocationHandler接口和java.lang.reflect.Proxy类来实现。AOP的主要思想...

    java 动态代理实现AOP

    ### Java动态代理实现AOP详解 #### 一、引言 随着软件开发复杂度的提升,传统的面向对象编程(OOP)已经难以满足现代软件工程的需求。为了更好地管理跨切面的关注点,如日志记录、性能监控、安全控制等,面向切面...

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

    值得注意的是,虽然这个例子展示了如何手动使用Java动态代理实现AOP,但在实际项目中,通常会使用像Spring这样的框架,它们提供了更高级的AOP功能,包括切点表达式、通知类型、织入策略等,使得AOP的使用更加便捷和...

    2022年Java动态代理实现AOPJava教程.docx

    Java 动态代理是实现AOP(面向切面编程)的一种高效途径,它允许开发者在不修改原有业务逻辑代码的情况下,插入额外的功能,如日志记录、性能监控、权限控制等。AOP的核心思想是将关注点分离,使得业务代码与横切...

    用java自己实现的动态代理 AOP

    下面是一个简单的Java动态代理实现AOP的例子,模拟日志记录功能: ```java public interface MyInterface { void doSomething(); } public class MyTarget implements MyInterface { @Override public void ...

    动态代理实现AOP思想

    以下是一个简单的例子,展示了如何使用Java动态代理实现AOP: ```java import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface MyInterface {...

    基于Java动态代理的AOP实现.zip

    本项目旨在通过Java的动态代理技术实现面向切面编程(AOP),涵盖了静态代理、JDK动态代理、CGLIB动态代理、AspectJ以及基于instrumentation的动态代理等多种实现方式。通过这些实现方式,可以在不修改原有代码的...

    java动态代理实例aop

    总之,Java动态代理和AOP提供了强大的工具,使我们能够优雅地实现代码解耦,提高代码的复用性和可维护性。通过代理对象,我们可以在不修改原始类代码的情况下,添加额外的功能或改变原有行为,这对于系统的服务层和...

    java动态代理 经典文章(word 2007格式的)

    - `设计模式:用Java动态代理实现AOP.docx`可能包含了如何使用Java动态代理来实现设计模式,尤其是代理模式,以达到AOP的效果。 - `Spring AOP入门实例详解.docx`可能涵盖了Spring AOP的基本概念、配置以及如何...

Global site tag (gtag.js) - Google Analytics