springAOP理解——java中的proxy实现AOP功能
来源:互联网 发布:gif剪裁软件 编辑:程序博客网 时间:2024/05/17 03:17
之前学习的例子,贴上来供大家共同学习。大家都知道,spring的AOP功能实际上是实现了java的动态代理功能,下面分别给出java动态代理、spring中CGLIB实现AOP功能、及spring 中实现AOP的配置(配置文件方式和注解方式)。
1.动态代理:在调用接口前,提前对要代理的接口进行拦截,拦截中做一些事,处理后继续调用接口方法,不影响正常逻辑
可用于权限控制
2.实现例子(没有列出相关jar)
1接口
package com.mooing.service;
public interface MyService {
public void save();
public void findAll();
public void update();
public void delete();
}
2实现类
package com.mooing.service;
public class MyServiceImpl implements MyService {
private String temp = null;
public MyServiceImpl() {
}
public MyServiceImpl(String temp) {
this.temp = temp;
}
public void save() {
System.out.println("this is save()");
}
@Override
public void findAll() {
System.out.println("this is findAll()");
}
@Override
public void update() {
System.out.println("this is update()");
}
@Override
public void delete() {
System.out.println("this is delete()");
}
public String getTemp() {
return temp;
}
}
3代理类
package com.mooing.service;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
为目标对象创建代理类
* 代理类,需实现InvocationHandle接口
* @author mooing
*
*/
public class MyProxyService implements InvocationHandler {
private Object targetObj;
/**
* 为目标对象创建代理类
*
* 传入要代理类,创建此类的代理实例
*
* @param targetObj 目标对象
* @return 返回目标对象的代理类
*/ public Object createProxyInstances(Object targetObj) {
this.targetObj = targetObj;
/**
* 参数1 要代理对象的类装载器
* 参数2 要代理对象的所有接口
* 参数3 触发哪个类里的拦截方法(回调方法invoke,处理实际调用方法前的操作) this代表当前类
*/
return Proxy.newProxyInstance(targetObj.getClass().getClassLoader(), targetObj.getClass().getInterfaces(), this);
}
/**
* 回调方法
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
// MyService ms=(MyService) createProxyInstances(new MyServiceImpl());
//MyServiceImpl myservice = (MyServiceImpl) targetObj;
//Object result = null;
// if (myservice.getTemp() != null) {
// result = method.invoke(targetObj, args);
//}
//return result;
System.out.println("进入拦截方法");
return method.invoke(targetObj, args);
}
}
测试类
package com.mooing.test;
import org.junit.Test;
import com.mooing.service.MyProxyService;
import com.mooing.service.MyService;
import com.mooing.service.MyServiceImpl;
public class MyProxyTest {
@Test
public void testJdkProxy() {
MyProxyService proxy = new MyProxyService();
//代理目的:如果给MyServiceImpl类中temp赋值,则调用接口方法,否则不调用,类似权限控制
MyService ms = (MyService) proxy.createProxyInstances(new MyServiceImpl("xxx"));
ms.delete();
}
}
- springAOP理解——java中的proxy实现AOP功能
- 编码实现用JDK中的Proxy实现springAOP功能
- JDK中的Proxy技术实现AOP功能
- JDK中的Proxy技术实现AOP功能
- JDK中的Proxy技术实现AOP功能
- java中的动态代理Proxy实现AOP
- spring AOP理解——spring中的CGLIB实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能[动态代理]
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- 使用JDK中的Proxy技术实现AOP功能
- AOP之Proxy技术实现AOP功能
- AOP——SpringAOP(最重要)
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 2
- 15_传智播客Spring2.5视频教程_使用JDK中的Proxy技术实现AOP功能 3
- Winsock网络编程
- 数字(2)
- hdu3576 Elevators in Jiayuan Students' Apartment
- IT开发工具
- Linux音频编程指南(1)
- springAOP理解——java中的proxy实现AOP功能
- java Json JQuery
- KissXML 简易教程
- URI的用法
- spring AOP理解——spring中的CGLIB实现AOP功能
- 新学期,新开始
- poj3096 Surprising Strings
- ubuntu下配置环境变量
- UILabel的各种属性与方法的使用