首页 > 代码库 > SpringAop学习
SpringAop学习
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.静态代理:
SpringAop学习
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。