动态代理可以实现AOP,比如日志记录。可以记录下每个方法的执行时间 ,名称和花费时间。代码如下:
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Date;
interface DoAction{
public void ViewAction();
public void AddAction();
}
class DoActionImpl implements DoAction {
public void ViewAction(){
System.out.println("查看信息!");
}
public void AddAction(){
System.out.println("添加信息!");
}
}
class ProxyAction implements InvocationHandler {
private Object action;
private User user = new User() ;
public ProxyAction(Object action) {
this.action = action;
}
public static Object getInstance(Object action) {
return Proxy.newProxyInstance(action.getClass().getClassLoader(),
action.getClass().getInterfaces(), new ProxyAction(action));
}
public Object invoke(Object proxy, Method m, Object[] args)
throws Throwable {
Date start = null;
Date end;
Object result = null;
try {
// 在委派之前作动作,如权限判断等
start = new Date();
// 进行委派
result = m.invoke(action, args);
} catch (InvocationTargetException e) {
throw e.getTargetException();
} catch (Exception e) {
throw new RuntimeException("unexpected invocation exception: "
+ e.getMessage());
} finally {
// 在委派之后做动作
end = new Date();
System.out.println(start+":"+m.getName()+"方法被执行,花费时间"+(end.getTime() -start.getTime()) );
}
return result;
}
}
//用户信息
class User{
private String permission = "ViewAction" ;
public String getPermission() {
return permission;
}
public void setPermission(String permission) {
this.permission = permission;
}
}
public class proxy {
public static void main(String[] args) {
DoAction action =(DoAction) ProxyAction.getInstance(new DoActionImpl());
action.AddAction();
}
}
分享到:
相关推荐
动态代理设计模式是一种在运行时创建代理...而Spring AOP则是将这一模式运用到实际开发中的典范,使得我们可以方便地进行面向切面的编程。通过研究提供的源码,你可以深化对动态代理和AOP的理解,提升你的编程技能。
【标题】:“(入门)什么是AOP?什么是代理模式?怎么设计日志拦截器?” 在编程领域,AOP(Aspect Oriented Programming,面向切面...了解并熟练运用AOP和代理模式,对于提升软件开发的效率和质量有着显著的作用。
在软件工程中,设计模式是...通过理解并熟练运用代理模式,开发者能够编写出更灵活、可维护的代码,同时提高应用程序的性能和用户体验。在实际项目中,可以根据具体需求选择静态代理或动态代理,以达到最佳的设计效果。
**AOP(面向切面编程)**是一种编程范式,主要应用于处理系统中的横切关注点,例如日志记录、事务管理、权限控制等。它将这些分散在代码各处...通过理解并熟练运用AOP,可以更好地设计和构建高效、整洁的Java应用程序。
例如,`@Before`方法会在目标方法执行前执行,可以用来进行权限检查或日志记录。通过这种方式,我们可以将关注点分离,提高代码的可维护性和可重用性。 总的来说,Java动态代理是实现运行时增强的一种方式,它使得...
切面是关注点的模块化,如日志记录、事务管理等,而通知则是切面在特定连接点上执行的行为。在Java中,通过动态代理可以实现在运行时为对象添加新的行为,而无需修改原始代码。 动态代理有两种主要实现方式:JDK...
Spring AOP(面向切面编程)利用了代理模式,可以为任何对象添加拦截器;而Spring的单例Bean管理,正是单例模式的体现。 总结来说,简单工厂、代理和单例模式是软件设计中的基础工具,它们帮助我们更好地组织代码,...
这些 jar 包的组合使用,构建了一个完整的 Spring AOP 环境,允许开发人员方便地定义切面,创建切入点,定义通知,以及选择合适的代理模式(如 JDK 动态代理或 CGLIB 代理)。这样,我们可以将关注点分离,提高代码...
- **代理模式**:Spring支持两种代理方式,JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标对象,而CGLIB代理则用于未实现接口的对象。 - **注解驱动的AOP**:通过在类或方法上使用特定的注解(如`@Aspect...
- Spring AOP的实现涉及到反射、动态代理、代理模式等多个核心Java技术。 - `org.springframework.aop.framework.ProxyFactoryBean` 和 `org.springframework.aop.framework.JdkDynamicAopProxy` 是动态代理的关键...
动态代理通常在需要在调用目标方法前后执行额外操作时使用,例如日志记录、性能监控、事务管理等。Java中的动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。下面我们将...
5. **代理模式**: Spring AOP有两种代理模式:JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标对象,而CGLIB代理则适用于没有接口或不希望修改接口的情况。Spring会根据目标对象是否实现接口自动选择合适的...
通过合理地运用AOP,我们可以使代码更加整洁,降低模块间的耦合度。 通过学习和实践面向切面编程和动态代理,开发者可以更高效地组织代码,提高代码的可维护性和可扩展性。在Spring框架中,AOP功能的使用让这些目标...
了解和熟练运用代理模式及其动态代理,能够帮助我们更好地设计和实现具有扩展性和灵活性的系统,特别是在需要进行额外控制或增加非核心业务功能的场景下。通过阅读提供的文档和源代码,你可以更深入地理解这些概念,...
AOP允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、权限检查等,通过切面来实现这些横切关注点。下面我们将深入探讨Spring AOP的基础概念和使用方法。 **1. AOP基本概念** - **切面(Aspect)**:切...
Spring的AOP模块就是一种动态代理机制,它可以实现方法拦截,从而在业务代码执行前后加入额外的逻辑,如事务管理、日志记录等。 总之,代理模式是一种强大的设计模式,它允许我们在不改变原有系统的基础上添加额外...
在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、...
在IT领域,面向对象设计模式是软件开发中的重要概念...通过理解并熟练运用代理模式,开发者可以更好地设计和重构系统,提高代码的可维护性和扩展性。在C#中,代理模式的灵活性和实用性使其成为处理复杂场景的重要工具。
代理模式在Java中的应用广泛,例如在AOP(面向切面编程)中,动态代理常用来实现切面逻辑,如事务管理、日志记录等。此外,还可以用于模拟远程调用,或者在不修改已有代码的情况下增强对象的行为。 总结一下,Java...
**面向切面编程(AOP)**是Spring的另一个关键特性,它允许开发者定义横切关注点,这些关注点可以是日志记录、事务管理、性能度量等跨多个类或方法的功能。AOP的核心是切面(Aspect)、连接点(Join Point)、通知...