java代理机制简单实现
来源:互联网 发布:淘宝的促销大师怎么用 编辑:程序博客网 时间:2024/06/05 07:18
java代理分静态代理和动态代理,动态代理有jdk代理和cglib代理两种,在运行时生成新的子类class文件。本文主要练习下动态代理,代码用于备忘。对于代理的原理和机制,网上有很多写的很好的,就不班门弄斧了。
- jdk代理下载
- import java.lang.reflect.InvocationHandler;
- import java.lang.reflect.Method;
- import java.lang.reflect.Proxy;
- public class ProxyFactory implements InvocationHandler {
- private Object tarjectObject;
- public Object creatProxyInstance(Object obj) {
- this.tarjectObject = obj;
- return Proxy.newProxyInstance(this.tarjectObject.getClass()
- .getClassLoader(), this.tarjectObject.getClass()
- .getInterfaces(), this);
- }
- @Override
- public Object invoke(Object proxy, Method method, Object[] args)
- throws Throwable {
- Object result = null;
- if (AssessUtils.isAssess()) {
- result = method.invoke(this.tarjectObject, args);
- }else{
- throw new NoAssessException("This server cannot run this service.");
- }
- return result;
- }
- }
- cglib代理下载
- import java.lang.reflect.Method;
- import org.springframework.cglib.proxy.Enhancer;
- import org.springframework.cglib.proxy.MethodInterceptor;
- import org.springframework.cglib.proxy.MethodProxy;
- public class ProxyCglibFactory implements MethodInterceptor {
- private Object tarjectObject;
- public Object creatProxyInstance(Object obj) {
- this.tarjectObject = obj;
- Enhancer enhancer=new Enhancer();
- enhancer.setSuperclass(this.tarjectObject.getClass());
- enhancer.setCallback(this);
- return enhancer.create();
- }
- @Override
- public Object intercept(Object obj, Method method, Object[] args,
- MethodProxy arg3) throws Throwable {
- Object result = null;
- if (AssessUtils.isAssess()) {
- result = method.invoke(this.tarjectObject, args);
- }else{
- throw new NoAssessException("This server cannot run this service.");
- }
- return result;
- }
- }
- Aspect注解下载
- import org.aspectj.lang.JoinPoint;
- import org.aspectj.lang.ProceedingJoinPoint;
- import org.aspectj.lang.annotation.Around;
- import org.aspectj.lang.annotation.Aspect;
- import org.aspectj.lang.annotation.Before;
- import org.aspectj.lang.annotation.Pointcut;
- @Aspect
- public class AssessInterceptor {
- @Pointcut(value="execution (* com..*.*(..))")
- private void anyMethod(){};
- @Before("anyMethod()")
- public void doBefore(JoinPoint joinPoint) throws NoAssessException{
- if (!AssessUtils.isAssess()) {
- throw new NoAssessException("This server cannot run this service.");
- }
- }
- /**
- * Around异常的时候调用
- * @param pjp
- * @throws Throwable
- */
- @Around("anyMethod()")
- public void invoke(ProceedingJoinPoint pjp) throws Throwable{
- pjp.proceed();
- }
- }
0 0
- java代理机制简单实现
- Java 动态代理实现机制
- java动态代理实现机制
- AOP的简单实现---动态代理机制
- JAVA动态代理机制简单应用
- Java动态代理简单实现
- Java NIO 实现简单代理
- java代理模式简单实现
- Java动态代理机制编码实现
- java中的动态代理机制实现AOP
- Java动态代理的实现机制
- Java动态代理的实现机制
- Java动态代理的实现机制
- Java--Proxy代理介绍及实现机制
- Java--Proxy代理介绍及实现机制
- 代理实现机制,Java中动态代理和cglib动态代理的实现机制
- java动态代理的简单实现:
- Java的远程代理简单实现
- http协议3---GET方式和POST方式获取表单数据举例2(统一方式获取)
- Spring Boot使用thymeleaf模板
- HDU1253 胜利大逃亡(三维广搜BFS+剪枝+优先队列)
- 学习之http缓存策略
- spring 自动扫包代码放置的位置问题
- java代理机制简单实现
- Linux中sudo命令使用方法
- QTtableview的用法(抓包持续积累中)
- 论javascript的web开发中的重要性
- delphi如何无源码调用bpl?
- 前端未解之谜:chrome浏览器全屏下mousemove事件的bug
- IDEA 常用设置记录
- maven添加jar包到本地仓库及到项目中
- 程序员的种类