SpringAop学习
Spring Aop (jdk动态代理和cglib代理)
Aop 的概念
aop即面向切面编程,一般解决具有横切面性质的体统(事务,缓存,安全)
JDK动态代理:
可以使用实现proxy 类,实现jdk的动态代理
步骤
1.创建目标接口
package com; public interface IPerson { public void print();
}
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 为对象的参数列表
package com; import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy; public class Proxys implements InvocationHandler{ private Object p;
public Object createObject(Object p){
this.p=p;
return Proxy.newProxyInstance(p.getClass().getClassLoader(), p.getClass().getInterfaces(), this);
} @Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
Person person=(Person)p;
Object obj=null;
if(person.getName()!=null){
System.out.println(person.getName());
obj=method.invoke(p, args);
}else{
System.out.println("名字为空,被拦截");
}
return obj;
} }
一个简单的
public interface OtherBean{
void f1();
}
public class OtherBeanService implements OtherBean{
private Object obj;
public OtherBeanService(Object obj){
this.obj=obj;
}
public Object invoke(Proxy proxy,Method method,Object args){
System.out.println("代理方法");
method.invoke(obj,args)
return null;
}
}
public class Test{
public static void main(String args[]){
OtherBean otherBean=new OtherBeanService();
ProxyUser proxyUser=new ProxyUser(otherBean);
OtherBean ob=(OtherBean)Proxy.newProxyInsance(otherbean.getClass.getClassLoader,otherBean.getClass.Interfaces,proxyUser);
ob.print();
}
}
利用CGLIB实现AOP功能
此方式不用有接口,导入jar包
1.先导入这两个jar 包
asm-3.3.1.jar
cglib-2.2.2.jar
2.写业务类
public class Student{
private String name;
public Student(String name){
this.name=name;
}
public void print(){
System.out.println("print");
}
}
//
public gig implement MethodIntercepter{
private Object obj;
public gig(Object obj){
this.obj=obj;
}
public Object intercept(Method method,Object [] obj,object args){//具体参数不记得了
System.out.println("代理方法!")
}
}
然后测试:省略!
spring 的aop进行登录,并且获取登录用时
贴代码
最新文章
- for循环每次取出一个字符(不是字节)
- React版本修改内容
- makefile学习小结
- PHP数据过滤
- iOS_动态插入或删除行
- Problem : 1202 ( The calculation of GPA )
- 看到一个对CAP简单的解释
- 小强的HTML5移动开发之路(4)——CSS2和CSS3
- SSM-MyBatis-03:Mybatis中简单的整合日志
- Touch Gesture手势总结
- 使用Nginx实现服务器反向代理和负载均衡
- 深入理解JVM(6)——JVM性能调优实战
- jqeury-地区三级联动
- python自动化开发-8
- 【ZZ】堆和堆的应用:堆排序和优先队列
- Redis实战(八)Redis的配置文件介绍
- iOS8 自定义navigationItem.titleView
- rabbitmq web管理界面 用户管理
- Android Log.isLoggable方法异常:exceeds limit of 23 characters
- Python学习之k-近邻实例