aop用代理实现

package com.atguigu.java;

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

interface Human1{
void info();
void fly();
}
//被代理类
class Superman1 implements Human1{

/* (non-Javadoc)
* @see com.atguigu.java.Human1#info()
*/
@Override
public void info() {
System.out.println("我是超人我怕谁");

}

/* (non-Javadoc)
* @see com.atguigu.java.Human1#fly()
*/
@Override
public void fly() {
System.out.println("i believe i can fly !");

}

}

class Humanutil1{
/**
* @author shanghaitao
* @since 2017年5月2日
*/
public void method1() {
System.out.println("------=方法一=-----");
}

/**
* @author shanghaitao
* @since 2017年5月2日
*/
public void method2() {
System.out.println("------=方法二=-----");
}

}

class MyinvacationHandlder1 implements InvocationHandler{

Object obj;
public void setObject(Object obj){
this.obj= obj;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Humanutil1 ht = new Humanutil1();
ht.method1();
Object oobj = method.invoke(obj, args);
ht.method2();
return oobj;
}

}

class Myproxy1{
/**
* @author shanghaitao
* @since 2017年5月2日
*/
public static Object getProxyInstance(Object obj) {
MyinvacationHandlder1 mh = new MyinvacationHandlder1();
mh.setObject(obj);
return Proxy.newProxyInstance(obj.getClass().getClassLoader(),
obj.getClass().getInterfaces(), mh);

}
}

/**
*方法说明
* @author shanghaitao
* @since 2017年5月2日
*/
public class TestAOP1 {
public static void main(String[] args) {
Superman1 man = new Superman1();
Object obj = Myproxy1.getProxyInstance(man);
Human1 hu = (Human1)obj;
hu.info();
System.out.println();
hu.fly();

}
}

输出

------=方法一=-----
我是超人我怕谁
------=方法二=-----

------=方法一=-----
i believe i can fly !
------=方法二=-----

时间: 2024-10-07 07:21:59

aop用代理实现的相关文章

详解 spring AOP 动态代理

通过例子查看,首先建立一个实现动态代理的接口Interface1.java,代码如下: package my.spring.fuck.aoptest; public interface Interface1 { public void say_hello(); } 很简单的一个接口,然后定义一个这个接口的实现类MyImple.java,代码: package my.spring.fuck.aoptest; public class MyImple implements Interface1{ @

AOP静态代理解析1-标签解析

AOP静态代理使用示例见Spring的LoadTimeWeaver(代码织入) Instrumentation使用示例见java.lang.instrument使用 AOP的静态代理主要是在虚拟机启动时通过改变目标对象字节码的方式来完成对目标对象的增强,它与动态代理相比具有更高的效率,因为在动态代理调用的过程中,还需要一个动态创建代理类并代理目标对象的步骤,而静态代理则是在启动时便完成了字节码增强,当系统再次调用目标类时与调用正常的类并无差别,所以在效率上会相对高些. AspectJ所做的事 在

Spring的AOP与代理

spring 支持两种注入方式: setter/constructor 支持多种配置方式: xml/java5注解/java类配置 支持两种事务管理: 声明性/编程性 实际上上述方式只有一个就能保证系统构建与运行了,就是说它们都是可以互换的.当然每个方式的优缺点不同. 6.2  Spring的AOPAOP(Aspect Orient Programming),也就是面向切面编程,作为面向对象编程的一种补充.问世的时间并不太长,甚至在国内的翻译还不太统一(有些书翻译成面向方面编程),但它确实极好地

反射实现AOP动态代理模式(Spring AOP实现原理)

其实AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决问题的方法中的共同点,是对OO思想的一种补充! 还是拿人家经常举的一个例子讲解一下吧: 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记录. 我们写个例子看看我们最简单的解决方案 我们先写一个接口IHello.java代码如下: package sinosoft.dj.aop.st

spring aop 动态代理批量调用方法实例

今天项目经理发下任务,需要测试 20 个接口,看看推送和接收数据是否正常.因为对接传输的数据是 xml 格式的字符串,所以我拿现成的数据,先生成推送过去的数据并存储到文本,以便验证数据是否正确,这时候要批量调用这些同名方法,我觉得这里可以发展成有潜力的代码. 推送比较好做数据,队友们都写好代码,但是有个问题,方法要的值都大致相同,封装的方式不一致,多人开发,有的封装对象里面,有的直接使用 Map.get(),唉,一千个人一千个哈姆雷特嘛,只好利用反射和动态代理节省自己的代码量,而且这种方式练练手

AOP之代理模式(一)

AOP,为Aspect OrientedProgramming的缩写,意为:面向切面,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率. 说了一堆很官方的话,大家可能不是特别明白,不过这些算是我们实践的理论寄出去,还是很有必要知道的,但是现在不必要很懂,接下来从最简单的代码开始,一步步的慢慢深入了解,到底什么是AOP,什么是代理模式.学习,就是这样一个理论与

Spring AOP动态代理

出现org.springframework.aop.framework.ProxyFactoryBean cannot be cast to 错误 在类型转换的时候, 调用getObject()方法,再对ProxyFactoryBean进行转换 xml文件 <aop:aspectj-autoproxy proxy-target-class="true"></aop:aspectj-autoproxy><!--使用cglib动态代理--> <be

.Net 框架实现AOP(动态代理实现AOP,本文为翻译)

在上一节,我们将静态实现AOP,但是对于一个大型项目,要想为每个类,每个方法都去实现AOP ,进行日志记录和权限验证似乎是不可能的. 即使可能对于成百上千个类维护,也是很难维护.所以今天的主题就是如标题所述. (Real Proxy)真正代理和(Dynamic Proxy)动态代理 Real Proxy 类是个抽象类,定义在 System.Runtime.Remoting.Proxies,定义了代理的一些公共的基本的功能方法. Dynamic Proxy 类必须继承Real Proxy,通过重写

AOP动态代理

Aspect Oriented Programming  面向切面编程.解耦是程序员编码开发过程中一直追求的.AOP也是为了解耦所诞生. 具体思想是:定义一个切面,在切面的纵向定义处理方法,处理完成之后,回到横向业务流. AOP 在Spring框架中被作为核心组成部分之一,的确Spring将AOP发挥到很强大的功能.最常见的就是事务控制.工作之余,对于使用的工具,不免需要了解其所以然.学习了一下,写了些程序帮助理解. AOP 主要是利用代理模式的技术来实现的. 1.静态代理:就是设计模式中的pr

.net 自定义AOP,透明代理与真实代理

using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Runtime.Remoting.Messaging; using System.Runtime.Remoting.Activation; using System.Runtime.Remoting; using NewAop; using System.Runtime.Remoting.Proxie