java 代理机制的实例详解

前言:
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();
}
}
以上就是java代理机制的实例,如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 代理机制
# 代理机制的实例
# 代理机制如何实现
# 全面了解Java中的CAS机制
# 关于Java反射机制 你需要知道的事情
# Java动态代理机制的实例详解
# 浅谈用java实现事件驱动机制
# Java Proxy机制详细解读
# 很好
# 班门弄斧
# 子类
# 有很多
# 就不
# 如有
# 两种
# 希望能
# 谢谢大家
# 疑问请
# 网上
# creatProxyInstance
# obj
# return
# tarjectObject
# implements
# ProxyFactory
# Object
# private
# getClassLoader
相关文章:
建站主机系统SEO优化与智能配置核心关键词操作指南
微信小程序 五星评分(包括半颗星评分)实例代码
JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)
魔方云NAT建站如何实现端口转发?
合肥制作网站的公司有哪些,合肥聚美网络科技有限公司介绍?
佛山网站制作系统,佛山企业变更地址网上办理步骤?
c# Task.Yield 的作用是什么 它和Task.Delay(1)有区别吗
如何快速查询域名建站关键信息?
如何注册花生壳免费域名并搭建个人网站?
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
表情包在线制作网站免费,表情包怎么弄?
大连 网站制作,大连天途有线官网?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
c# 在高并发场景下,委托和接口调用的性能对比
IOS倒计时设置UIButton标题title的抖动问题
如何在万网主机上快速搭建网站?
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
广州网站建站公司选择指南:建站流程与SEO优化关键词解析
建站主机空间推荐 高性价比配置与快速部署方案解析
php条件判断怎么写_ifelse和switchcase的使用区别【对比】
阿里云网站搭建费用解析:服务器价格与建站成本优化指南
如何确保FTP站点访问权限与数据传输安全?
C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
实现虚拟支付需哪些建站技术支撑?
武清网站制作公司,天津武清个人营业执照注销查询系统网站?
电影网站制作价格表,那些提供免费电影的网站,他们是怎么盈利的?
网站制作的软件有哪些,制作微信公众号除了秀米还有哪些比较好用的平台?
如何用搬瓦工VPS快速搭建个人网站?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
如何使用Golang安装API文档生成工具_快速生成接口文档
网站制作与设计教程,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何打造高效商业网站?建站目的决定转化率
如何在七牛云存储上搭建网站并设置自定义域名?
Python路径拼接规范_跨平台处理说明【指导】
建站之星安装提示数据库无法连接如何解决?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
h5在线制作网站电脑版下载,h5网页制作软件?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
建站168自助建站系统:快速模板定制与SEO优化指南
电脑免费海报制作网站推荐,招聘海报哪个网站多?
GML (Geography Markup Language)是什么,它如何用XML来表示地理空间信息?
网站网页制作电话怎么打,怎样安装和使用钉钉软件免费打电话?
自助网站制作软件,个人如何自助建网站?
c# await 一个已经完成的Task会发生什么
宝塔新建站点报错如何解决?
网站制作软件免费下载安装,有哪些免费下载的软件网站?
如何选择高效便捷的WAP商城建站系统?
招商网站制作流程,网站招商广告语?
如何在阿里云ECS服务器部署织梦CMS网站?
*请认真填写需求信息,我们会在24小时内与您取得联系。