用户业务接口:
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();
}
}
分享到:
相关推荐
Java动态代理实现AOP Java动态代理是实现Aspect Oriented Programming(AOP)的重要手段。在Java中,动态代理可以通过java.lang.reflect InvocationHandler接口和java.lang.reflect.Proxy类来实现。AOP的主要思想...
### Java动态代理实现AOP详解 #### 一、引言 随着软件开发复杂度的提升,传统的面向对象编程(OOP)已经难以满足现代软件工程的需求。为了更好地管理跨切面的关注点,如日志记录、性能监控、安全控制等,面向切面...
3. **Java动态代理实现AOP** 从Java 1.3开始,Java提供了`java.lang.reflect.Proxy`和`java.lang.reflect.InvocationHandler`接口来支持动态代理。动态代理可以在运行时动态创建代理对象,无需提前定义代理类,更...
在本文中,我们将深入探讨Spring AOP的核心概念、工作原理以及如何在实际项目中实现AOP思想。 1. **AOP概述** 面向切面编程(Aspect-Oriented Programming,AOP)是一种编程范式,旨在减少代码的重复性,提高模块...
Spring框架是Java中实现AOP的一个流行工具,它通过动态代理机制实现了这一功能。本文将深入探讨Spring AOP的实现原理,以及如何使用反射来实现动态代理模式。 首先,我们需要了解AOP的基本概念。AOP的核心思想是切...
下面是一个简单的Java动态代理实现AOP的例子,模拟日志记录功能: ```java public interface MyInterface { void doSomething(); } public class MyTarget implements MyInterface { @Override public void ...
Java 动态代理是实现AOP(面向切面编程)的一种高效途径,它允许开发者在不修改原有业务逻辑代码的情况下,插入额外的功能,如日志记录、性能监控、权限控制等。AOP的核心思想是将关注点分离,使得业务代码与横切...
Java动态代理是实现AOP的一种方式,尤其适用于简单场景,而无需引入额外的AOP框架。 在给定的例子中,我们有一个`BusinessInterface`接口和一个实现了该接口的`BusinessObject`类。`BusinessObject`中,业务逻辑...
动态代理是实现AOP的一种常见方式,特别是在Java中。 在Java中,动态代理主要涉及到两个类:java.lang.reflect.Proxy和java.lang.reflect.InvocationHandler。Proxy类用于创建一个实现了特定接口的代理对象,而...
### Java反射与代理实现AOP #### 一、AOP概念及应用场景 AOP(Aspect-Oriented Programming,面向切面编程)是一种编程思想和技术,主要用于处理横切关注点问题,比如日志记录、性能统计、安全控制、事务处理、...
Java动态代理是Java提供的一种在运行时创建新类型对象的技术,它可以让我们在不修改原有代码的情况下,对方法的调用进行增强,这正是Spring AOP(面向切面编程)的核心思想。Spring AOP通过代理模式实现了对业务逻辑...
Java动态代理是Java编程中一个非常重要的特性,它允许我们在运行时创建代理对象,这些代理对象可以代替原对象执行某些额外的操作,例如...了解并掌握Java动态代理机制,对于提升Java编程能力及理解AOP思想至关重要。
利用 Java 的反射与代理实现 AOP AOP(Aspect Oriented Programming),即面向切面编程,是一种新的编程思想,它主要用于日志记录、性能统计、安全控制、事务处理、异常处理等方面。其主要意图是将日志记录、性能...
例如,`Castle.DynamicProxy`库就是基于动态代理实现AOP的。动态代理在运行时创建代理类,可以针对接口或者抽象类,而不需要重新编译源代码。这使得代码更加灵活,但性能相比静态织入略低。 3. **特性驱动编程**: ...
总之,AOP是提高代码复用和模块化的重要工具,Java中的静态和动态代理提供了实现AOP的途径。通过研究这个项目中的代码,开发者可以深化对AOP原理和实践的理解,并将其应用于实际项目中,提升代码质量和可维护性。
当通过代理调用方法时,拦截器的`Intercept`方法会被自动调用,从而实现AOP的功能。 总结来说,.NET的动态代理AOP拦截通过Castle.DynamicProxy库,使开发者能够方便地在运行时为对象创建代理,插入拦截逻辑,实现如...
在这个实例中,我们主要关注的是如何使用Java的动态代理来实现AOP,而非JNI。Java的动态代理机制允许我们在运行时创建一个实现了特定接口的新类,这个新类可以用来在方法调用前后插入额外的逻辑,这就是AOP的核心...