`

动态代理实现AOP思想

阅读更多



 用户业务接口:

package biz;

public interface UserBiz {

	public void add();

}

 

用户业务接口实现类:

package biz;

import annotation.Before;

public class UserBizImpl implements UserBiz {

	@Before(name="记录日志方法")
	public void log(){
		System.out.println("UserBizImpl.log()");
	}
	
	
	public void add(){
		System.out.println("UserBizImpl.add()");
	}
}

 业务方法执行前注解:

package annotation;

import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;


@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Before {
	
	public String name() default "";
}

 代理工厂类:

 

package proxy;

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

import annotation.Before;

public class ProxyFactory implements InvocationHandler{
	
	private Object target;
	
	public Object getProxy(Object target) {
		this.target = target;
		Object proxy = Proxy.newProxyInstance(target.getClass().getClassLoader(),
				target.getClass().getInterfaces(), this);
		return proxy;
	}

	@Override
	public Object invoke(Object proxy, Method method, Object[] args)
			throws Throwable {
		
			Object obj = null;
			System.out.println("方法前的处理");
			parseBeforeMethod();
			try {
				obj = method.invoke(target, args);
				System.out.println("方法后的处理");
			} catch (Exception e) {
				System.out.println("方法异常处理");
				e.printStackTrace();
			}finally{
				System.out.println("方法的最终处理");
			}
		
		return obj;
	}
	
	private void parseBeforeMethod(){
		Class<?> clazz = target.getClass();
		for(Method method : clazz.getDeclaredMethods()){
			Before before = method.getAnnotation(Before.class);
			if(before != null){
				try {
					method.invoke(target);
					return;
				} catch (Exception e) {
					e.printStackTrace();
				} 
			}
		}
		
	}
}

 

客户端代码:

package client;

import proxy.ProxyFactory;
import biz.UserBiz;
import biz.UserBizImpl;

public class Client {

	public static void main(String[] args) {
		
		UserBiz userBiz = (UserBiz) new ProxyFactory().getProxy(new UserBizImpl());
		
		userBiz.add();
		
	}

}

 

0
0
分享到:
评论

相关推荐

    用Java动态代理实现AOP

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

    java 动态代理实现AOP

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

    aop思想的java实现

    3. **Java动态代理实现AOP** 从Java 1.3开始,Java提供了`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`接口来支持动态代理。动态代理可以在运行时动态创建代理对象,无需提前定义代理类,更...

    适用spring 实现AOP思想

    在本文中,我们将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中实现AOP思想。 1. **AOP概述** 面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在减少代码的重复性,提高模块...

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

    Spring框架是Java中实现AOP的一个流行工具,它通过动态代理机制实现了这一功能。本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切...

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

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

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

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

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

    Java动态代理是实现AOP的一种方式,尤其适用于简单场景,而无需引入额外的AOP框架。 在给定的例子中,我们有一个`BusinessInterface`接口和一个实现了该接口的`BusinessObject`类。`BusinessObject`中,业务逻辑...

    AOP动态代理(反射机制)

    动态代理是实现AOP的一种常见方式,特别是在Java中。 在Java中,动态代理主要涉及到两个类:java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler。Proxy类用于创建一个实现了特定接口的代理对象,而...

    java反射与代理实现AOP

    ### Java反射与代理实现AOP #### 一、AOP概念及应用场景 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,主要用于处理横切关注点问题,比如日志记录、性能统计、安全控制、事务处理、...

    个人用java动态代理模拟实现spring aop

    Java动态代理是Java提供的一种在运行时创建新类型对象的技术,它可以让我们在不修改原有代码的情况下,对方法的调用进行增强,这正是Spring AOP(面向切面编程)的核心思想。Spring AOP通过代理模式实现了对业务逻辑...

    利用C#实现AOP常见的几种方法详解

    例如,`Castle.DynamicProxy`库就是基于动态代理实现AOP的。动态代理在运行时创建代理类,可以针对接口或者抽象类,而不需要重新编译源代码。这使得代码更加灵活,但性能相比静态织入略低。 3. **特性驱动编程**: ...

    java使用动态代理来实现AOP(日志记录)的实例代码共6

    Java动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代替原对象执行某些额外的操作,例如...了解并掌握Java动态代理机制,对于提升Java编程能力及理解AOP思想至关重要。

    利用Java的反射与代理实现AOP.pdf

    利用 Java 的反射与代理实现 AOP AOP(Aspect Oriented Programming),即面向切面编程,是一种新的编程思想,它主要用于日志记录、性能统计、安全控制、事务处理、异常处理等方面。其主要意图是将日志记录、性能...

    aop思想的java代码实现

    总之,AOP是提高代码复用和模块化的重要工具,Java中的静态和动态代理提供了实现AOP的途径。通过研究这个项目中的代码,开发者可以深化对AOP原理和实践的理解,并将其应用于实际项目中,提升代码质量和可维护性。

    .Net动态代理AOP拦截

    当通过代理调用方法时,拦截器的`Intercept`方法会被自动调用,从而实现AOP的功能。 总结来说,.NET的动态代理AOP拦截通过Castle.DynamicProxy库,使开发者能够方便地在运行时为对象创建代理,插入拦截逻辑,实现如...

    详解使用Java原生代理实现AOP实例共4页.pdf.zi

    在这个实例中,我们主要关注的是如何使用Java的动态代理来实现AOP,而非JNI。Java的动态代理机制允许我们在运行时创建一个实现了特定接口的新类,这个新类可以用来在方法调用前后插入额外的逻辑,这就是AOP的核心...

Global site tag (gtag.js) - Google Analytics