标签:对象 pack log 缓存 eth handler imp create rri
Spring Aop (jdk动态代理和cglib代理)
Aop 的概念
aop即面向切面编程,一般解决具有横切面性质的体统(事务,缓存,安全)
JDK动态代理:
可以使用实现proxy 类,实现jdk的动态代理
步骤
1.创建目标接口
1 package com; 2 3 public interface IPerson { 4 5 public void print(); 6 }
2.实现目标接口
package com; public class Person implements IPerson { private String name; public String getName() { return name; } public void setName(String name) { this.name = name; } public Person() { super(); } public Person(String name) { super(); this.name = name; } @Override public void print() { System.out.println("Person.print()"); } }
3.创建代理工厂类
1.实现实现 invcationHandler 接口
2,申明一个对象作为代理的属性
3.申明一个createObject方法 返回一个代理对象 (Proxy.newProxyInstance("获得属性对象的类加载",“获得属性对象的接口结合”,this 当前对象));
4.invoke方法,对此对象进行处理 参数(Proxy ,method,Object o)注:Proxy代理对象,method 对象的方法,Object 为对象的参数列表
1 package com; 2 3 import java.lang.reflect.InvocationHandler; 4 import java.lang.reflect.Method; 5 import java.lang.reflect.Proxy; 6 7 public class Proxys implements InvocationHandler{ 8 9 private Object p; 10 public Object createObject(Object p){ 11 this.p=p; 12 return Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(), this); 13 } 14 15 @Override 16 public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { 17 Person person=(Person)p; 18 Object obj=null; 19 if(person.getName()!=null){ 20 System.out.println(person.getName()); 21 obj=method.invoke(p, args); 22 }else{ 23 System.out.println("名字为空,被拦截"); 24 } 25 return obj; 26 } 27 28 }
2.静态代理:
标签:对象 pack log 缓存 eth handler imp create rri
原文地址:http://www.cnblogs.com/javaweb2/p/6240043.html