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

帝国网站系统做专题苏州保洁公司哪家好

帝国网站系统做专题,苏州保洁公司哪家好,建工社官网,网站优化软件排名优化代理#xff1a; 代理模式最主要的就是在不改变原来代码#xff08;就是目标对象#xff09;的情况下实现功能的增强 在学习AOP之前先了解代理#xff0c;代理有两种#xff1a;一种是动态代理#xff0c;一类是静态代理。 静态代理 相当于是自己写了一个代理类#…代理 代理模式最主要的就是在不改变原来代码就是目标对象的情况下实现功能的增强 在学习AOP之前先了解代理代理有两种一种是动态代理一类是静态代理。 静态代理 相当于是自己写了一个代理类在调用的时候调用的是代理类代理类中的处理还是原生的处理逻辑不过在前后添加上需要增强功能的代码。类似继承实现的 缺点需要为每一个被代理的对象都创建一个代理类。 静态代理实现 1.创建接口 public interface Target {public abstract String getExe(); }2.实现目标对象 public class MyTarget implements Target {Overridepublic String getExe() {System.out.println(执行ing.....);return ok;} }3.实现代理对象 package 反射;public class Proxy implements Target{MyTarget myTarget;public Proxy(MyTarget myTarget) {this.myTarget myTarget;}Overridepublic String getExe() {System.out.println(权限检查);String res myTarget.getExe();System.out.println(日志打印);return res;} }4.测试代码 package 反射;public class demo1 {public static void main(String[] args) {MyTarget myTargetnew MyTarget();Proxy proxy new Proxy(myTarget);proxy.getExe();}}动态代理 动态代理模式最大的优势就是不用自己去写一个代理对象它的代理对象会在java文件编译的时候通过Java反射去创建的。所以减少了程序员的工作。动态代理的实现有两种方式现在来介绍一下(基于接口实现) jdk代理 1.创建接口 package com.aqiuo.jdk;public interface UserDao {public void addUser();public void deleteUser(); }2.创建实现类 package 代理;public class UserServiceImpl implements UserService{public void addUser(){System.out.println(添加用户);}public void delUser(){System.out.println(删除用户);}}3.编写切面类 package 代理;public class Aspect {public void admission(){System.out.println(权限检查);}public void log(){System.out.println(日志打印);} }4.编写代理类 package 代理;import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy;public class JdkProxy implements InvocationHandler {//用Object型才能动态代理Object object;public Object createInstance(Object object){this.objectobject;Class[] clazz object.getClass().getInterfaces();ClassLoader classLoaderJdkProxy.class.getClassLoader();return Proxy.newProxyInstance(classLoader,clazz,this);}Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {Aspect aspectnew Aspect();aspect.admission();Object res method.invoke(object,args);aspect.log();return res;} }5.测试 public class Test {public static void main(String[] args) {JdkProxy jdkProxy new JdkProxy();UserService userServicenew UserServiceImpl();UserService proxy (UserService) jdkProxy.createInstance(userService);proxy.addUser();;proxy.delUser();} } /**JDK代理有一定局限性使用动态代理的对象必须实现一个或多个接口如果要对没有实现接口的类进行代理可以用CGLIB代理 CGLIB代理 CGLIB是一个高性能的开源代码生成包采用非常底层的字节码技术对指定的目标类生成一个子类并对子类增强已经在Spring中集成 导包 dependencygroupIdcglib/groupIdartifactIdcglib/artifactIdversion2.2.2/version /dependency MethodInterceptor拦截器 cglib的实现最重要的就是去实现这个MethodInterceptor接口来完成就像jdk时候的InvocationHandler一样 package com.aqiuo.cglib; //被代理的类 public class UserDao {public void addUser() {// TODO Auto-generated method stubSystem.out.println(添加用户);}public void deleteUser() {// TODO Auto-generated method stubSystem.out.println(删除用户);}} 实现代理类 //代理类 package com.aqiuo.cglib;import java.lang.reflect.Method;import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy;import com.aqiuo.Aspect.MyAspect;public class CglibProxy implements MethodInterceptor {//代理方法public Object createProxy(Object target) {//创建一个动态类对象Enhancer enhancernew Enhancer();//确定要增强的类设置为她的父类enhancer.setSuperclass(target.getClass());//添加回调函数enhancer.setCallback(this);//返回创建的代理类return enhancer.create();}/*** ProxyCGlib根据指定的父类生成代理对象* method拦截的方法* args拦截方法的参数数组* methodProxy方法的代理对象用来执行父类方法*/Overridepublic Object intercept(Object proxy, Method method, Object[] args, MethodProxy methodProxy) throws Throwable {//创建切面类对象MyAspect myAspectnew MyAspect();//前增强myAspect.check_permissions();//目标方法执行Object objectmethodProxy.invokeSuper( proxy, args);//后增强myAspect.log();return object;}} cglib的原理就是在运行的时候cglib会自动去生成一个子类在子类里面去完成增强操作就是拦截器里面,这里我们来验证cglib就用保存它的子类来查验也就是将它自动生成的类放在一个指定路径下去看。  //测试类 package com.aqiuo.cglib;public class CglibTest {public static void main(String[] args) {UserDao userDaonew UserDao();CglibProxy proxynew CglibProxy();UserDao userDao2(UserDao) proxy.createProxy(userDao);userDao2.addUser();userDao2.deleteUser();}} cglib动态代理原理 ①创建拦截器继承MethodInterceptor的 intercepter的类在拦截器中重写intercerpt( )方法就是增强目标对象的方法调用返回拦截器 ②在测试这边创建一个类似proxy的子类对象enhancer然后设置这个代理对象的类型setSuperclass目标对象的类型.class完成 ③创建一个拦截器enhancer通过去设置回调函数setCallback拦截器 ④创建代理对象enhancer.create()代理对象的类型要和目标对象一致哈然后通过代理对象去完成方法的调用
http://www.pierceye.com/news/285310/

相关文章:

  • 创建个人网站的流程沈阳德泰诺网站建设
  • 网站备案 接口开一个网站多少钱
  • 郑州网站制作公司哪家好公司网页怎么设计
  • 如何做好企业网站建设工作公众微信网站建设
  • 企业网站开发时间动效网站怎么做
  • 网站编辑是网页制作么表格制作excel下载
  • 网站开发 发表文章网站开发和移动开发
  • 建设银行网站的目的是什么意思展览策划
  • 没有网站如何做落地页wordpress 用户 购物
  • 谁做网站收录网站建设项目竞争性招标文件
  • 做淘客要有好的网站wordpress move
  • 做企业网站有前途吗网站的栏目设置
  • 免费购物网站专门教人做点心的网站
  • 佛山网站设计哪里好seo关于网站搜索排名关键词的标准评定
  • 化工行业网站模板网站上怎么做动画广告视频
  • 怎么查百度收录网站吗用旧技术做网站能过毕设么知乎
  • 容桂医疗网站建设怎样在网站做咨询医生挣钱
  • 响应式网站建设价格加盟网络营销推广公司
  • 营销型网站单页面360任意看地图网站
  • 易班班级网站建设展示PPTwordpress php 采集器
  • 网站的透明图片怎么做嘉兴网站托管
  • 宝安做棋牌网站建设哪家便宜wordpress 导出html5
  • 网页制作与网站建设的发展趋势设想wordpress必装插件
  • 网站模板下载百度云链接怎么做的学做粤菜的网站
  • 牛栏前网站建设整站优化推广品牌
  • 太原做网站找谁阳江公司做网站
  • 企业网站aspwordpress原生相册
  • 重庆网站建设哪家公司那家好企业宣传软文
  • 如何选择营销网站建设什么网站做优化最好?
  • 个人博客网站模板素材网站的运营方案