Java 动态代理插入日志

被代理对象的接口

1 public interface IScoreService {
2     public void addScore(String s,String s1);
3 }

被代理的对象的实现

1 public class ScoreServiceImpl implements IScoreService{
2     int  score = 0;
3     public  List<Integer> sList = new ArrayList<Integer>();
4
5     public void addScore(String s,String s1){
6         System.out.println(score+=3);
7         sList.add(score);
8     }
9 }

代理类

 1 public class LogHandler implements InvocationHandler {
 2
 3     private Object targetObject;
 4
 5     public Object createProxy(Object targetObject){
 6         this.targetObject = targetObject;
 7         return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),
 8                 targetObject.getClass().getInterfaces(),
 9                 this);
10     }
11
12     public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
13
14         Object obj = null;
15         try {
16             beforeLog();
17             obj = method.invoke(targetObject, args);
18             afterLog();
19         } catch (Exception e) {
20             e.printStackTrace();
21         }
22
23
24         return obj;
25     }
26
27     private void beforeLog(){
28         System.out.println("在之前调用");
29     }
30
31     private void afterLog(){
32         System.out.println("在之后调用");
33     }
34
35 }

测试类

1 public class TestHandler{
2     public static void main(String [] args){
3          IScoreService servcie = (IScoreService)logHandler.createProxy(new ScoreServiceImpl());
4          servcie.addScore("","");
5     }
6 }
时间: 2024-10-05 17:16:40

Java 动态代理插入日志的相关文章

Java动态代理简单应用

概念 代理模式是基本的设计模式之一,它是开发者为了提供额外的或不同的操作,而插入的用来代替“实际”对象的对象.这些操作通常涉及与“实际”对象的通信,因此代理通常充当着中间人的角色. Java动态代理比代理的思想更进一步,因为它可以动态地创建代理并动态地处理对代理方法的调用.在动态代理上所做的所有调用都会被重定向到单一的调用处理器(InvocationHandler)上,调用处理器的工作是揭示调用的类型并确定相应的策略. Java动态代理实现机制采用了反射的思想,有关于反射的基础知识,可以参见博客

java动态代理的实现

动态代理作为代理模式的一种扩展形式,广泛应用于框架(尤其是基于AOP的框架)的设计与开发,本文将通过实例来讲解Java动态代理的实现过程. 友情提示:本文略有难度,读者需具备代理模式相关基础知识,. 通常情况下,代理模式中的每一个代理类在编译之后都会生成一个class文件,代理类所实现的接口和所代理的方法都被固定,这种代理被称之为静态代理(Static Proxy).那么有没有一种机制能够让系统在运行时动态创建代理类?答案就是本文将要介绍的动态代理(Dynamic Proxy).动态代理是一种较

JAVA动态代理详解

1.什么是代理 代理模式是常用的Java 设计模式,它的特征是代理类与委托类有同样的接口,代理类主要负责为委托类预处理消息.过滤消息.把消息转发给委托类,以及事后处理消息等. 2.什么是动态代理 在程序运行时,运用反射机制动态创建代理实例对象.JDK的动态代理机制只能代理实现了接口的类,而不能实现接口的类就不能实现JDK的动态代理. 相关类与接口 java.lang.reflect.Proxy:这是 Java 动态代理机制的主类,它提供了一组静态方法来为一组接口动态地生成代理类及其对象. //

java动态代理学习笔记

没事的时候翻看lang.reflect包下的代码,发现有两部分内容:涉及反射和动态代理. 很多地方都可以看到动态代理的影子,只是一直没仔细看下. 在学习之前,先提出几个问题,带着问题来看代码: 1.什么是动态代理? 2.为什么使用动态代理? 3.使用它有哪些好处? 4.哪些地方需要动态代理? --------------------分隔线----------------------------- 和动态代理有关的有两个类 1.interface InvocationHandler Object

详解java动态代理

生活中的代理: 比如一个明星成名了以后,是需要有一个代理的,因为太多人想找他签名,应付不来,那么这个时候代理的作用是拦截你对真正明星的访问,他可以拦截下来收点费用,再叫真正的明星过来为你签名. 程序中的代理: 1,要为已存在的多个具有相同接口的目标类的各个方法增加一些系统功能,例如,异常处理.日志.计算方法的运行时间.事务管理.等等,你准备如何做? 2,编写一个与目标类具有相同接口的代理类,代理类的每个方法调用目标类的相同方法,并在调用方法时加上系统功能的代码 下图显示了在程序中代理的调用原理(

java动态代理技术

主要用来做方法的增强.让你能够在不改动源代码的情况下,增强一些方法,在方法运行前后做不论什么你想做的事情(甚至根本不去运行这种方法).由于在InvocationHandler的invoke方法中,你能够直接获取正在调用方法相应的Method对象.详细应用的话.比方能够加入调用日志,做事务控制等. 另一个有趣的作用是能够用作远程调用,比方如今有Java接口,这个接口的实现部署在其他server上,在编写client代码的时候,没办法直接调用接口方法,由于接口是不能直接生成对象的,这个时候就能够考虑

java动态代理,及spring AOP

介绍:spring 的AOP (Aspect Oriented Programming)是通过java的动态代理来实现的,对于AOP不了解的朋友可以去网上看相关资料,我这里重点说明实现原理即java动态代理 要谈java动态代理就不得不说java的代理模式,我这里只给出代理模式的UML图 如图(1)及动态代理模式的UML类图 如图(2) 说明:图(2)中的红色红色斜体的类或接口是由java类库提供的即 Proxy和InvocationHandler 是java对动态代理的支持 图 (1) 和 图

【转载】Java 动态代理

Java 动态代理 本文为 Android 开源项目源码解析 公共技术点中的 动态代理 部分项目地址:Jave Proxy,分析的版本:openjdk 1.6,Demo 地址:Proxy Demo分析者:Caij,校对者:Trinea,校对状态:完成 1. 相关概念 1.1 代理 在某些情况下,我们不希望或是不能直接访问对象 A,而是通过访问一个中介对象 B,由 B 去访问 A 达成目的,这种方式我们就称为代理.这里对象 A 所属类我们称为委托类,也称为被代理类,对象 B 所属类称为代理类.代理

动态代理实现日志的写入

之前在学习设计模式的时候就学习过代理模式,在DRP的学习过程中,又一次遇到了代理模式,但是这次接触到的是动态代理.做项目的时候也听同学们提到过AOP,那么动态代理和AOP是一种什么样的关系呢?    一.代理定义 图1  代理模式类图 代理模式:给某一个对象提供一个代理,并由代理对象控制对原对象的引用. 代理模式能够协调调用者和被调用这,在一定的程度上降低了系统的耦合度,但是由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢.    二.动态代理 动态代