当前位置: 首页 > news >正文

网站seo外包公司页面设计的软件

网站seo外包公司,页面设计的软件,网站访问量asp,做外贸必须知道的网站理解动态代理 动态代理的核心在于代理对象的创建和方法调用是在运行时动态发生的,而不是在编译时就已经确定的性能监控、事务管理、日志记录通常需要使用代理对象对目标对象的功能进行增强为什么JDK动态代理只能代理有接口的类? 因为Proxy.newProxyIns…

理解动态代理

  1. 动态代理的核心在于代理对象的创建和方法调用是在运行时动态发生的,而不是在编译时就已经确定的
  2. 性能监控、事务管理、日志记录通常需要使用代理对象对目标对象的功能进行增强
  3. 为什么JDK动态代理只能代理有接口的类?
  • 因为Proxy.newProxyInstance方法需要传入被动态代理的接口类target.getClass().getInterfaces(),之所以要传入接口而不能传入类,因为JDK动态代理会在运行时生成一个代理类,叫做$Proxy0,这个代理类会继承java.lang.reflect.Proxy这个类,同时还会去实现被代理类的接口,在Java里面是不支持多继承的,而每一个动态代理类都继承了一个Proxy,所以就导致了JDK动态代理只能代理接口,而不能代理实现类
  • 其实也可以进行实现类的代理,但是代理接口的设计更符合业务场景,因为实际的开发中都是面向接口来开发的,所以基于接口来实现动态代理更符合业务场景

JDK动态代理

public interface Service {void doSomething();
}public class ServiceImpl implements Service {@Overridepublic void doSomething() {System.out.println("Doing something");}
}import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;/*** JDK动态代理示例*/
public class MyInvocationHandler implements InvocationHandler {// target在构造之后不会发生改变private final Object target;public MyInvocationHandler(Object target) {this.target = target;}public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println("前置处理");Object object = method.invoke(target, args);System.out.println("后置处理");return object;}// 调用此方法,会返回一个实现了目标对象所有接口的代理对象,这个代理对象会使用当前类作为InvocationHandlerpublic Object getProxy() {// 类加载器、接口数组、InvocationHandlerreturn Proxy.newProxyInstance(Thread.currentThread().getContextClassLoader(), target.getClass().getInterfaces(), this);}}public static void main(String[] args) {// 创建真实的服务对象Service realService = new ServiceImpl();// 创建 MyInvocationHandler 的实例,并传入真实的服务对象MyInvocationHandler handler = new MyInvocationHandler(realService);// 使用 MyInvocationHandler 创建代理对象Service proxy = (Service) handler.getProxy();// 调用代理对象的方法proxy.doSomething();}

CGlib动态代理

<dependency><groupId>cglib</groupId><artifactId>cglib</artifactId><version>3.2.5</version></dependency>

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;
import java.lang.reflect.Method;/*** 适用于没有实现任何接口的类* 需要引入cglib代码库* cglib增强器,负责拦截方法调用,并添加额外逻辑*/
public class CGlibProxy implements MethodInterceptor {public Object createProxy(Object target) {Enhancer enhancer = new Enhancer();enhancer.setSuperclass(target.getClass());enhancer.setCallback(this);return enhancer.create(); // 动态创建代理对象}@Overridepublic Object intercept(Object obj, Method method, Object[] args, MethodProxy proxy) throws Throwable {System.out.println("前置处理");Object result = proxy.invokeSuper(obj, args); // 动态调用方法System.out.println("后置处理");return result;}
}public static void main(String[] args) {ServiceImpl service = new ServiceImpl();CGlibProxy proxy = new CGlibProxy();ServiceImpl proxyService = (ServiceImpl) proxy.createProxy(service);proxyService.doSomething();}
http://www.yayakq.cn/news/775681/

相关文章:

  • 怎么做卡盟网站网站内容资源建设
  • 免费在线观看电视剧的网站wordpress 首页 动
  • 东莞企业怎么做网站建设太原市微网站建设
  • 企业网站建设条件百度智能创作平台
  • 合肥建设企业网站wordpress 程序员主题
  • 免费网站制作 优帮云提高网站浏览量
  • 郑州网站推广优化外包公司备案期间网站关闭
  • 学校要建个网站应该怎么做高清做网站插图
  • 一个微信可以做两个网站支付宝如何加快门户网站建设
  • 陇南地网站seo免费域名申请国外
  • 四川网站建设公司 登录优化网络的软件
  • 如何进行医药网站建设网站建设的部署与发布
  • 天津智能网站建设拓者吧室内设计
  • 酷炫的网站模板免费下载东至网站制作
  • app定制开发网站建设哪个网站做国际生意
  • 长沙雨花区建设局网站有了网站源代码
  • 凡科网站建站后 怎么编辑自己的代码源注册网站备案
  • 公司企业网站建设哪个网站可以做化学实验
  • 网站里怎么做301指向西安网站优化服务
  • 西安网站定制网站开发和合同
  • 网站建设和优化需要几个人wordpress站关注别人
  • 南京html5网站建设展厅设计图片
  • 网站配色与布局 教材企业软件
  • 中山森斯网站建设公司企业做网站认证有哪些好处
  • 面试建设单位在哪个网站wordpress无法连接app
  • 东莞电子网站建设好的logo设计网站
  • 麻城网站制作公司大连建设科技网站
  • 有哪些设计的很优秀的网站简述企业网站推广的一般策略
  • 太原网站设计企业网站建设兴田德润电话
  • 网站开始开发阶段的主要流程网站页面设计和结构的技巧