`
liulanghan110
  • 浏览: 1078025 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

代理模式的运用,AOP日志记录

    博客分类:
  • JAVA
阅读更多

动态代理可以实现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?什么是代理模式?怎么设计日志拦截器?” 在编程领域,AOP(Aspect Oriented Programming,面向切面...了解并熟练运用AOP和代理模式,对于提升软件开发的效率和质量有着显著的作用。

    Android设计模式之代理模式(Proxy Pattern)

    在软件工程中,设计模式是...通过理解并熟练运用代理模式,开发者能够编写出更灵活、可维护的代码,同时提高应用程序的性能和用户体验。在实际项目中,可以根据具体需求选择静态代理或动态代理,以达到最佳的设计效果。

    aop的工作原理

    **AOP(面向切面编程)**是一种编程范式,主要应用于处理系统中的横切关注点,例如日志记录、事务管理、权限控制等。它将这些分散在代码各处...通过理解并熟练运用AOP,可以更好地设计和构建高效、整洁的Java应用程序。

    java中动态代理,springAop.pdf

    例如,`@Before`方法会在目标方法执行前执行,可以用来进行权限检查或日志记录。通过这种方式,我们可以将关注点分离,提高代码的可维护性和可重用性。 总的来说,Java动态代理是实现运行时增强的一种方式,它使得...

    使用cglib演示动态代理时用到的jar包 aop 动态代理

    切面是关注点的模块化,如日志记录、事务管理等,而通知则是切面在特定连接点上执行的行为。在Java中,通过动态代理可以实现在运行时为对象添加新的行为,而无需修改原始代码。 动态代理有两种主要实现方式:JDK...

    简单工厂,代理模式,单例模式demo

    Spring AOP(面向切面编程)利用了代理模式,可以为任何对象添加拦截器;而Spring的单例Bean管理,正是单例模式的体现。 总结来说,简单工厂、代理和单例模式是软件设计中的基础工具,它们帮助我们更好地组织代码,...

    Spring AOP jar包

    这些 jar 包的组合使用,构建了一个完整的 Spring AOP 环境,允许开发人员方便地定义切面,创建切入点,定义通知,以及选择合适的代理模式(如 JDK 动态代理或 CGLIB 代理)。这样,我们可以将关注点分离,提高代码...

    aop使用例子源码

    - **代理模式**:Spring支持两种代理方式,JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标对象,而CGLIB代理则用于未实现接口的对象。 - **注解驱动的AOP**:通过在类或方法上使用特定的注解(如`@Aspect...

    spring aop 学习笔记

    - Spring AOP的实现涉及到反射、动态代理、代理模式等多个核心Java技术。 - `org.springframework.aop.framework.ProxyFactoryBean` 和 `org.springframework.aop.framework.JdkDynamicAopProxy` 是动态代理的关键...

    代理模式之动态代理

    动态代理通常在需要在调用目标方法前后执行额外操作时使用,例如日志记录、性能监控、事务管理等。Java中的动态代理通过`java.lang.reflect.Proxy`类和`java.lang.reflect.InvocationHandler`接口来实现。下面我们将...

    Spring_Annotation_AOP

    5. **代理模式**: Spring AOP有两种代理模式:JDK动态代理和CGLIB代理。JDK代理适用于实现了接口的目标对象,而CGLIB代理则适用于没有接口或不希望修改接口的情况。Spring会根据目标对象是否实现接口自动选择合适的...

    使用动态代理面向切面编程(AOP)

    通过合理地运用AOP,我们可以使代码更加整洁,降低模块间的耦合度。 通过学习和实践面向切面编程和动态代理,开发者可以更高效地组织代码,提高代码的可维护性和可扩展性。在Spring框架中,AOP功能的使用让这些目标...

    代理模式及动态代理资料和源代码

    了解和熟练运用代理模式及其动态代理,能够帮助我们更好地设计和实现具有扩展性和灵活性的系统,特别是在需要进行额外控制或增加非核心业务功能的场景下。通过阅读提供的文档和源代码,你可以更深入地理解这些概念,...

    spring 的AOP 基础

    AOP允许开发者将关注点从核心业务逻辑中分离出来,比如日志记录、权限检查等,通过切面来实现这些横切关注点。下面我们将深入探讨Spring AOP的基础概念和使用方法。 **1. AOP基本概念** - **切面(Aspect)**:切...

    设计模式 之 “代理模式[Proxy Pattern]”

    Spring的AOP模块就是一种动态代理机制,它可以实现方法拦截,从而在业务代码执行前后加入额外的逻辑,如事务管理、日志记录等。 总之,代理模式是一种强大的设计模式,它允许我们在不改变原有系统的基础上添加额外...

    Spring实现AOP的4种方式

    在Spring框架中,AOP(面向切面编程)是一种强大的设计模式,它允许开发者将关注点从业务逻辑中分离出来,比如日志记录、事务管理、权限检查等。本篇文章将详细探讨Spring实现AOP的四种主要方法:基于代理的方式、...

    C#面向对象设计模式纵横谈(13):Proxy 代理模式(结构型模式) (Level 300)

    在IT领域,面向对象设计模式是软件开发中的重要概念...通过理解并熟练运用代理模式,开发者可以更好地设计和重构系统,提高代码的可维护性和扩展性。在C#中,代理模式的灵活性和实用性使其成为处理复杂场景的重要工具。

    java 代理模式详解

    代理模式在Java中的应用广泛,例如在AOP(面向切面编程)中,动态代理常用来实现切面逻辑,如事务管理、日志记录等。此外,还可以用于模拟远程调用,或者在不修改已有代码的情况下增强对象的行为。 总结一下,Java...

    springioc和spring aop

    **面向切面编程(AOP)**是Spring的另一个关键特性,它允许开发者定义横切关注点,这些关注点可以是日志记录、事务管理、性能度量等跨多个类或方法的功能。AOP的核心是切面(Aspect)、连接点(Join Point)、通知...

Global site tag (gtag.js) - Google Analytics