JavaSE-反射
2016-02-22 11:30
447 查看
package com.btp.t4.Reflection; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; interface Human{ void info(); void fly(); } //被代理类 class SuperMan implements Human{ public void info() { System.out.println("我是超人!"); } public void fly() { System.out.println("我可以飞!"); } } class HumanUtil{ public void method1(){ System.out.println("====方法1===="); } public void method2(){ System.out.println("====方法2===="); } } class MyInvocationHandlers implements InvocationHandler{ Object obj;//被代理类对象的声明 @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { HumanUtil h=new HumanUtil(); h.method1(); Object returnVal=method.invoke(obj, args); h.method2(); return returnVal; } public void setObject(Object obj){ this.obj=obj; } } class MyProxy{ //动态的创建一个代理类的对象 public static Object getProxyInstance(Object obj){ MyInvocationHandlers handler= new MyInvocationHandlers(); handler.setObject(obj); return Proxy.newProxyInstance(obj.getClass().getClassLoader(), obj.getClass().getInterfaces(), handler); } } public class TestAOP { public static void main(String[] args){ SuperMan man=new SuperMan();//创建一个被代理类的对象 Object obj=MyProxy.getProxyInstance(man); Human hu=(Human)obj; hu.info(); System.out.println(); hu.fly(); } }
TestAOP
相关文章推荐
- Spring AOP不拦截从对象内部调用的方法原因
- LeetCode27RemoveElement--In Java
- Java Socket编程 标准范例(多线程)
- (1) 自定义分页<采用jsp和Java实现>
- Java基础知识
- 基于Spring框架的Shiro配置
- java基础
- java集合深度复制
- 最新Eclipse SVN插件地址
- java8新特性全面解析
- VS2010 根据WSDL文件(java Web Service)生成.cs文件
- Java [Leetcode 168]Excel Sheet Column Title
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- Java8 Lambda表达式教程
- JAVA单例模式
- Eclipse中第一次初始化项目
- eclipse和myeclipse中如何关闭自动补全括号,花括号,双引号等功能
- spring事物回滚