长春市长春网站建设可以做直播卖产品的网站

news/2025/10/6 23:36:11/文章来源:
长春市长春网站建设,可以做直播卖产品的网站,长春seo网站管理,学视频剪辑报个班的多少钱当需要在方法前后做一些操作就需要借助动态代理来实现 一、动态代理实现方法 1、jdk自带实现方式 jdk实现代理是被代理类实现接口的方式 public interface UserInterface {void test(); }public class UserService implements UserInterface {public void test() {System.o…当需要在方法前后做一些操作就需要借助动态代理来实现 一、动态代理实现方法 1、jdk自带实现方式 jdk实现代理是被代理类实现接口的方式 public interface UserInterface {void test(); }public class UserService implements UserInterface {public void test() {System.out.println(call test method);}}UserService target new UserService();Object o Proxy.newProxyInstance(Test.class.getClassLoader(), new Class[]{UserInterface.class}, new InvocationHandler() {Overridepublic Object invoke(Object proxy, Method method, Object[] args) throws Throwable {System.out.println(test method before);Object invoke method.invoke(target, args);System.out.println(test method after);return invoke;}});// 只能代理实现UserInterface接口的类不能强转成UserServiceUserInterface userInterface (UserInterface)o;userInterface.test(); 打印结果 test method before call test method test method after  必须基于实现接口产生代理对象类型是UserInterface而不是UserService 2、基于cglib实现 相比jdk动态代理cglib不需要修改代码就可以实现动态代理cglib实现代理是继承被代理类的方式 public class UserService {public void test() {System.out.println(call test method);}public void a() {System.out.println(call test a);} }UserService target new UserService();// 通过cglib技术Enhancer enhancer new Enhancer();enhancer.setSuperclass(UserService.class);// 定义额外逻辑也就是代理逻辑enhancer.setCallbacks(new Callback[]{new MethodInterceptor() {Overridepublic Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {System.out.println(before...);Object result methodProxy.invoke(target, objects);System.out.println(after...);return result;}}, NoOp.INSTANCE});enhancer.setCallbackFilter(new CallbackFilter() {Overridepublic int accept(Method method) {if (method.getName().equals(test)) {return 0;} else {return 1;}}});// 动态代理所创建出来的UserService对象UserService userService (UserService) enhancer.create();// 执行这个userService的test方法时就会额外会执行一些其他逻辑userService.test();// 调用a方法时对应过滤返回的是1NoOp.INSTANCE是空操作不会对代理对象做任何操作userService.a(); 打印结果 before... call test method after... call test a 3、spring对jdk和cglib进行封装的ProxyFactory public class UserService {public void test() {System.out.println(call test method);} }UserService target new UserService();ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置proxyFactory.addAdvice(new MethodInterceptor() {Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {System.out.println(before...);Object result invocation.proceed();System.out.println(after...);return result;}});UserService userService (UserService) proxyFactory.getProxy();userService.test(); 打印结果 before... call test method after... 4、Advice分类 Before Advice方法之前执行After returning advice方法return后执行After throwing advice方法抛异常后执行After (finally) advice方法执行完finally之后执行这是最后的比return更后Around advice这是功能最强大的Advice可以自定义执行顺序 Before Advice ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置proxyFactory.addAdvice(new TestBeforeAdvice());UserService userService (UserService) proxyFactory.getProxy();userService.test();public class TestBeforeAdvice implements MethodBeforeAdvice {Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(方法执行之前);} }public class UserService {public void test() {System.out.println(call test method);} } 打印结果 方法执行之前 call test method  After returning advice ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置proxyFactory.addAdvice(new TestAfterReturningAdvice());UserService userService (UserService) proxyFactory.getProxy();userService.test();public class TestAfterReturningAdvice implements AfterReturningAdvice {Overridepublic void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {System.out.println(方法返回之后);} }public class UserService {public void test() {System.out.println(call test method);} } 打印结果 call test method 方法返回之后  After throwing advice 可根据异常类型在指定异常发生时做对应操作 ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置proxyFactory.addAdvice(new TestAfterThrowingAdvice());UserService userService (UserService) proxyFactory.getProxy();userService.test();public class TestAfterThrowingAdvice implements ThrowsAdvice {public void afterThrowing(Method method, Object[] args, Object target, Exception ex) {System.out.println(方法执行发生异常);} }public class UserService {public void test() {System.out.println(call test method);throw new RuntimeException();} } 打印结果 call test method 方法执行发生异常 Exception in thread main java.lang.RuntimeExceptionat com.zhouyu.service.UserService.test(UserService.java:25)at com.zhouyu.service.UserService$$FastClassBySpringCGLIB$$7bfcfe0.invoke(generated)at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:204)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:791)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:166)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)at org.springframework.aop.framework.adapter.ThrowsAdviceInterceptor.invoke(ThrowsAdviceInterceptor.java:113)at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:198)at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.proceed(CglibAopProxy.java:762)at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:704)at com.zhouyu.service.UserService$$EnhancerBySpringCGLIB$$e9a0fc71.test(generated)at com.zhouyu.Test.main(Test.java:25) Around advice UserService target new UserService();ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置proxyFactory.addAdvice(new TestAroundAdvice());UserService userService (UserService) proxyFactory.getProxy();userService.test();public class UserService {public void test() {System.out.println(call test method);} }public class TestAroundAdvice implements MethodInterceptor {NullableOverridepublic Object invoke(NotNull MethodInvocation invocation) throws Throwable {System.out.println(方法执行之前);Object proceed invocation.proceed();System.out.println(方法执行之后);return proceed;} } 打印结果 方法执行之前 call test method 方法执行之后 上述的Advice只要是UserService类的方法都会被代理执行 5、Advisor 添加自己想执行的执行的方法下面代码只会执行test方法的Advice代码 public class UserService {public void test() {System.out.println(call test method);}public void a() {System.out.println(call test a);} }UserService target new UserService();ProxyFactory proxyFactory new ProxyFactory();proxyFactory.setTarget(target); // proxyFactory.setInterfaces(UserInterface.class); // jdk动态时设置 // proxyFactory.addAdvice(new TestBeforeAdvice());proxyFactory.addAdvisor(new PointcutAdvisor() {Overridepublic Pointcut getPointcut() {return new StaticMethodMatcherPointcut() {Overridepublic boolean matches(Method method, Class? targetClass) {if (method.getName().equals(test)) {return true;}return false;}};}Overridepublic Advice getAdvice() {return new TestBeforeAdvice();}Overridepublic boolean isPerInstance() {return false;}});UserService userService (UserService) proxyFactory.getProxy();userService.test();userService.a(); 打印结果 方法执行之前 call test method call test a 二、ProxyFactoryBean 利用ProxyFactoryBean生成一个代理对象执行test方法之前执行代理逻辑 public class UserService {public void test() {System.out.println(call test method);}public void a() {System.out.println(call test a);} }Beanpublic ProxyFactoryBean userServiceProxy() {ProxyFactoryBean proxyFactoryBean new ProxyFactoryBean();proxyFactoryBean.setTarget(new UserService());proxyFactoryBean.addAdvice(new TestBeforeAdvice());return proxyFactoryBean;}AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) applicationContext.getBean(userServiceProxy);userService.test(); 打印结果 方法执行之前 call test method  三、BeanNameAutoProxyCreator beanName匹配到的将会自动创建代理对象根据设置的Advice在调用方法时执行相关代理逻辑通过beanPostProcessor把Advice添加到一个集合中当调用调用被代理类时指定的beanName的方法执行时都会执行代理逻辑 Beanpublic BeanNameAutoProxyCreator beanNameAutoProxyCreator() {BeanNameAutoProxyCreator beanNameAutoProxyCreator new BeanNameAutoProxyCreator();beanNameAutoProxyCreator.setBeanNames(userSe*);beanNameAutoProxyCreator.setInterceptorNames(testBeforeAdvice);beanNameAutoProxyCreator.setProxyTargetClass(true);return beanNameAutoProxyCreator;}Component public class TestBeforeAdvice implements MethodBeforeAdvice {Overridepublic void before(Method method, Object[] args, Object target) throws Throwable {System.out.println(方法执行之前);} }AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) applicationContext.getBean(userService);userService.test(); 打印结果 方法执行之前 call test method 四、DefaultAdvisorAutoProxyCreator // 定义一个advisorBeanpublic DefaultPointcutAdvisor defaultPointcutAdvisor(){NameMatchMethodPointcut pointcut new NameMatchMethodPointcut();pointcut.addMethodName(test);DefaultPointcutAdvisor defaultPointcutAdvisor new DefaultPointcutAdvisor();defaultPointcutAdvisor.setPointcut(pointcut);defaultPointcutAdvisor.setAdvice(new TestBeforeAdvice());return defaultPointcutAdvisor;}// 执行beanPostProcessor时会把advisor添加到一个集合中Beanpublic DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator() {DefaultAdvisorAutoProxyCreator defaultAdvisorAutoProxyCreator new DefaultAdvisorAutoProxyCreator();return defaultAdvisorAutoProxyCreator;}AnnotationConfigApplicationContext applicationContext new AnnotationConfigApplicationContext(AppConfig.class);UserService userService (UserService) applicationContext.getBean(userService);userService.test(); 打印结果 方法执行之前 call test method 五、AOP概念 AspectJ是在编译时对字节码进行了修改是直接在UserService类对应的字节码中进行增强的也就是可以理解为是在编译时就会去解析Before这些注解然后得到代理逻辑加入到被代理的类中的字节码中去的所以如果想用AspectJ技术来生成代理对象 是需要用单独的AspectJ编译器的。我们在项目中很少这么用我们仅仅只是用了Before这些注解而我们在启动Spring的过程中Spring会去解析这些注解然后利用动态代理机制生成代理对象的。 Aspect表示切面比如被Aspect注解的类就是切面可以在切面中去定义Pointcut、Advice等等Join point表示连接点表示一个程序在执行过程中的一个点比如一个方法的执行比如一个异常的处理在Spring AOP中一个连接点通常表示一个方法的执行。Advice表示通知表示在一个特定连接点上所采取的动作。Advice分为不同的类型后面详细讨论在很多AOP框架中包括Spring会用Interceptor拦截器来实现Advice并且在连接点周围维护一个Interceptor链Pointcut表示切点用来匹配一个或多个连接点Advice与切点表达式是关联在一起的Advice将会执行在和切点表达式所匹配的连接点上Introduction可以使用DeclareParents来给所匹配的类添加一个接口并指定一个默认实现Target object目标对象被代理对象AOP proxy表示代理工厂用来创建代理对象的在Spring Framework中要么是JDK动态代理要么是CGLIB代理Weaving表示织入表示创建代理对象的动作这个动作可以发生在编译时期比如Aspejctj或者运行时比如Spring AOP ​AspectJ定义的几个注解 BeforeAfterReturningAfterThrowingAfterAround

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/929820.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

肇庆建设网站手机建网站制作

python script常见格式: import sys #导入sys模块 from util import * #从util模块导入全部需要的变量,函数等 module[webview,content_shell,chrome] #列表数据结构 number(1,2,5,6,9) #元祖数据结构,不可改变 转载于:https://www.cnblogs.com/hanying/p/3792601.html

Dart 调用 Tesseract 实现验证码识别

一、背景介绍 验证码(CAPTCHA)常用于防止恶意程序批量请求。通常我们需要通过 OCR 技术识别验证码,从而实现自动化。 本文将介绍如何使用 Dart 调用 Tesseract OCR 来识别验证码。 二、技术选型 语言:Dart OCR 引擎…

淘宝美工网站怎么做万网网站空间

在本篇文章中我们主要围绕下面几个问题来介绍async 和await 🍰Generator的作用,async 及 await 的特点,它们的优点和缺点分别是什么?await 原理是什么? 📅我的感受是我们先来了解Generator,在去…

汽车之家这样的网站怎么做企业网站要求

C左值右值左值和右值的由来什么是左值和右值左值右值的本质引用左值引用右值引用 移动语句与完美转发移动语句实现移动构造函数和转移赋值函数stdmove完美转发Perfect Forwarding C左值右值 自从C11发布之后,出现了一个新的概念,即左值和右值&#xf…

关于做ppt的网站有哪些内容吗东莞品牌设计公司

中国大数据技术大会(BDTC)由中国计算机学会(CCF)创立于2008年,已经成为国内外极具行业实践的专业大数据交流平台。12月22日-24日,第十七届中国大数据技术大会(BDTC 2023)在广州举行。…

Audacity导出音频后发声提醒

这么一个看似简单的功能,实现起来却颇费周折。 据ai说,Audacity 3.3版本只需要简单设置一下就可以了。但后来的版本莫名其妙去掉了这个功能。 ai给了大量的错误信息。首先用Nyquist写插件,没用,它只能生成一个音频…

怎样批量做全国网站有专业做外贸的网站吗

文章目录 [toc]使用工具1. 本地搭建web网站1.1 下载phpstudy后解压并安装1.2 打开默认站点,测试1.3 下载静态演示站点1.4 打开站点根目录1.5 复制演示站点到站网根目录1.6 在浏览器中,查看演示效果。 2. 将本地web网站发布到公网2.1 安装cpolar内网穿透2…

做网站首页可以用传媒公司吗松江品划做企业网站

1、使用-t做不同项目的环境隔离 pip intall xxx -t /path/env1 公共环境放一个路径,其他放单独路径,可以完美隔离 训练时通过export PYTHONPATH/path/env1:$PYTHONPATH来调整 2、安装包,因为依赖导致失败 加上参数–no-deps, 不按照依赖 有…

网站制作完成之后进入什么阶段网站推广有哪些手段

来源于公众未读代码 ,作者达西呀创建项目创建一个 SpringBoot 项目非常的简单,简单到这里根本不用再提。你可以在使用 IDEA 新建项目时直接选择 Spring Initlalize 创建一个 Spring Boot 项目,也可以使用 Spring 官方提供的 Spring Boot 项目…

.net 网站开发平原网站建设费用

简介:四位企业运维大咖展开对话,讨论“云时代下,企业运维面临的挑战与机遇”。 编者按:上云,已经成为了企业势不可挡的选择。云计算所拥有的“软件定义一切”的特性,推动了敏捷弹性、DevOps、智能运维和基…

防范AI提示词攻击(2025):AI-FOCUS团队「AI FENCE」实战方案

防范AI提示词攻击(2025):AI-FOCUS团队「AI FENCE」实战方案要稳妥防范提示词攻击(Prompt Injection/Prompt Leaking/TokenBreak),优先选择具备“流式网关 + 双向拦截 + 语义与规则并行”能力的产品。AI-FOCUS 团…

请人建网站需要多少钱wordpress调用菜单的代码

最近刚好又遇到了抓包的需求,之前一直使用 Fiddler 抓包,这几年一直听大家都在用 Charles 抓包,正好一起了解下(一般建议掌握一种抓包方式即可,都可以解决同种需求场景) 抓包 Fiddler抓包 Charles 下载、安…

您的网站未备案自己做抽奖网站违法吗

Eclipse 1.在程序代码中实现 需要注意的是: this.requestWindowFeature(Window.FEATURE_NO_TITLE); 这段代码一定要放在setContentView();方法前面,否则不会生效! 这个方法只会在引用过的布局才会生效,比如这个activity_main引用了,就不会…

做一个会Debug的程序员

2025 10 6 随笔 JavaDbug碰壁今天Java出的问题实在是受不了了于是我去求助了远哥,但是还是我debug的问题。环境变量 环境变量 环境变量today has not any sentence, because i am very besy with the snack video. an…

2025/10/6

2025/10/6学习

深度噪声抑制技术在语音增强中的突破

某中心团队在Interspeech 2020深度噪声抑制挑战赛中荣获非实时赛道冠军,其创新系统在仅使用4% CPU核心的情况下实现高质量实时语音增强,通过改进的U-Net网络和感知优化技术显著提升语音质量。某中心团队在Interspeec…

泰安润泽建设工程有限公司网站三亚私人高清影院品牌加盟

在mvvm的模式下wpf通过frame实现页面跳转_哔哩哔哩_bilibili 视频讲解同步可观看 如下图,我们要实现点击左侧的菜单,在右侧展示不同的页面 实现代码如下: 一、如何从主窗体跳转到页面。 1、在mainwindow.xaml的菜单栏代码里加入如下代码 …

APUE学习笔记之UNIX标准及实现(二) - Invinc

本文记录《UNIX环境高级编程》第3版中第2章UNIX标准与实现的一些知识点。本文记录《UNIX环境高级编程》第3版中第2章UNIX标准与实现的一些知识点。UNIX标准化 ISO C 1989年下半年,C程序设计语言的ANSI标准X3.159-1989…

存一下刚开始学编程的东西

phpstudy的MySQL启动不了的解决办法关了自己的MySQL把自己的MySQL中的所有文件复制把phpstudy的MySQL文件全删了再粘贴搞定为什么phpstudy创建的网站不能打开解决办法www.abc.com端口弄80去C:\Windows\system32\driver…

域名到期查询怎样做网站的优化工作

postmaster内容 使用cat -n 命令可以查看postmaster.pid文件内容: ) 根据每一行进行解释,并给出对应的源代码说明 13795: 代表Postgres主进程的PID/usr/local/pgsql/data: 代表数据目录 1529235109: 代表postmaster文件的创建时间。 54…