使用JDK动态代理实现切面编程
2013-06-24 23:18
483 查看
package com.huxin.dynamic_proxy; public interface UserService { public void add(String userId,String name); public void modify(String userId,String name); public String findById(String userId); }
package com.huxin.dynamic_proxy; public class UserServiceImpl implements UserService { public void add(String userId, String name) { System.out.println("add()"); } public void modify(String userId, String name) { System.out.println("modify()"); } public String findById(String userId) { System.out.println("findById()"); return "王八"; } }
package com.huxin.dynamic_proxy; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import org.omg.CORBA.SystemException; import org.omg.CORBA.portable.InputStream; import org.omg.CORBA.portable.InvokeHandler; import org.omg.CORBA.portable.OutputStream; import org.omg.CORBA.portable.ResponseHandler; public class LogHandler implements InvocationHandler { private static LogHandler instance = new LogHandler(); private Object targetObject; private LogHandler(){} public static LogHandler getInstance(){ return instance; } //生成一个动态代理的对象 public Object newDynamicproxy(Object targetObject){ this.targetObject = targetObject; return Proxy.newProxyInstance(targetObject.getClass().getClassLoader(),targetObject.getClass().getInterfaces(),this); } public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object object = null; System.out.println(method.getName()+"方法开始之前被调用"+"参数为:"+ args[0]+args[1]); //这句话才是真正调用它的方法 object = method.invoke(this.targetObject, args); System.out.println(method.getName()+"方法开始之后被调用"); return object; } }
package com.huxin.dynamic_proxy; public class Client { public static void main(String[] args) { UserService userService = (UserService)LogHandler.getInstance().newDynamicproxy(new UserServiceImpl()); userService.add("1", "hu_xinxin"); } }
相关文章推荐
- 分析动态代理Java JDK 动态代理(AOP)使用及实现原理分析
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 反射结合动态代理实现切面编程
- Java动态代理模式jdk和cglib的2种实现以及二者的区别(AOP面向切面的前奏)
- JDK核心API:使用动态代理实现AOP功能
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java JDK 动态代理(AOP)使用及实现原理分析
- 使用ThreadLocal与JDK动态代理 实现事务AOP管理
- Spring的AOP实现使用的JDK的动态代理必须使用接口
- spring_由注解实现AOP面向切面编程_实现动态代理
- 使用JDK和CGLIB实现动态代理
- Java JDK 动态代理(AOP)使用及实现原理分析
- AOP面向切面编程,JDK的动态代理方式
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java JDK 动态代理(AOP)使用及实现原理分析
- Java JDK 动态代理(AOP)使用及实现原理分析
- spring_由XML实现AOP面向切面编程_实现动态代理
- 使用JDK中的Proxy技术来实现动态代理
- Java动态代理之JDK动态代理和CGLib动态代理 面向切面编程AOP原理
- Java JDK 动态代理使用及实现原理分析