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

评估网站建设方案wordpress模板商店

评估网站建设方案,wordpress模板商店,seo关键词排名优化专业公司,推广公司业务个人主页#xff1a; 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门#xff0c;这篇文章将继续详解Aspectj框架的其它注解。 文章目录#x1f496;Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Ar… 个人主页 几分醉意的CSDN博客_传送门 上节我们介绍了什么是AOP、Aspectj框架的前置通知Before传送门这篇文章将继续详解Aspectj框架的其它注解。 文章目录Aspectj框架介绍✨JoinPoint通知方法的参数✨后置通知AfterReturning✨环绕通知Around✨异常通知AfterTrowing✨Pointcut定义和管理切入点注解✨总结投票传送门欢迎伙伴们投票Aspectj框架介绍 AOP技术思想的实现:使用框架实现AOP。实现AOP的框架有很多。有名的两个 1. SpringSpring框架实现AOP思想中的部分功能。Spring框架实现AOP的操作比较繁琐笨重。 2. Aspectj独立的框架专门做AOp的功能最强大的。属于Eclipse。 而我下面主要介绍的就是Aspectj框架来实现AopAspectj框架可以使用注解和xml配置文件两种方式实现AOP。 ✨JoinPoint通知方法的参数 切面类中的通知方法,可以有参数但是必须是JoinPoint。 JoinPoint: 表示正在执行的业务方法。 相当于反射中 Method 使用要求:必须是参数列表的第一个 作用:获取方法执行时的信息例如方法名称 方法的参数集合 下面我们直接实战注意下面用的是上一节的前置通知的业务接口和实现类。 切面类 Aspect public class MyAspect {Before(value execution(* *..SomeServiceImpl.do*(..) ))public void myBefore2(JoinPoint jp){//获取方法的定义System.out.println(前置通知中获取目标方法的定义 jp.getSignature());System.out.println(前置通知中获取方法的名称jp.getSignature().getName());//获取方法执行时的参数Object[] args jp.getArgs(); //返回的是一个数组 里面存放的是所有参数for (Object arg : args) {System.out.println(前置通知获取方法的参数是arg);}//切面的代码。System.out.println(前置通知切面的功能在目标方法之前先执行new Date());System.out.println();}}测试 Testpublic void test(){//如果没有加入代理的处理// 1目标方法执行时没有切面功能的。// 2) service对象没有被改变//加入代理的处理// 1目标方法执行时有切面功能的。// 2) service对象是改变后的 代理对象 com.sun.proxy.$Proxy8String s applicationContext.xml;ApplicationContext ctx new ClassPathXmlApplicationContext(s);SomeService service (SomeService)ctx.getBean(someService);service.doSome(ll , 22);}//JoinPoint哪个目标对象方法执行时它就代表哪个方法//例如这里doSome执行时它就代表doSome然后可以获取这个方法的信息执行结果 拓展 ✨后置通知AfterReturning * AfterReturning:后置通知* 属性value 切入点表达式* returning 自定义的变量表示目标方法的返回值的。* 自定义变量名称必须和通知方法的形参名一样* 位置在方法的上面** 特点* 1.在目标方法之后执行的。* 2.能获取到目标方法的执行结果。* 3.不会影响目标方法的执行** 方法的参数* Object res 表示目标方法的返回值使用res接收doOther的调用结果。* Object res doOther();** 后置通知的执行顺序* Object res SomeServiceImpl.doOther(..); 先执行业务方法* myAfterReturning(res); 在执行后置通知** 思考* 1 doOther方法返回是String Integer Long等基本类型* 在后置通知中修改返回值 是不会影响目标方法的最后调用结果的。* 2 doOther返回的结果是对象类型例如Student。* 在后置通知方法中修改这个Student对象的属性值会不会影响最后调用结果*下面通过举例的方式带大家理解后置通知。 首先业务接口添加doOther方法然后实现它的实现类 public interface SomeService {void doSome(String name,Integer age);String doOther(String name,Integer age); }public class SomeServiceImpl implements SomeService {Overridepublic void doSome(String name, Integer age) {System.out.println(业务方法doSome(),创建商品订单);}Overridepublic String doOther(String name, Integer age) {System.out.println(执行业务方法doOther处理库存);return abcd;} }创建切面类 Aspect public class MyAspect {//定义方法表示切面的具体功能/*后置通知方法的定义1方法是public2方法是void3方法名称自定义4方法有参数推荐使用Object类型*/AfterReturning(value execution(* *..SomeServiceImpl.doOther(..)),returning res)public void myAfterReturning(JoinPoint jp , Object res){System.out.println(后置通知在目标方法之后执行的。能拿到执行结果res);//修改目标方法的返回值if(res ! null){res HELLO Aspectj;}System.out.println(后置通知修改res后res);} }测试 Testpublic void test02(){String configapplicationContext.xml;ApplicationContext ctx new ClassPathXmlApplicationContext(config);SomeService service (SomeService) ctx.getBean(someService);String ret service.doOther(zhangsan, 20);System.out.println(test02中调用目标方法的结果ret);}执行结果 ✨环绕通知Around 特点介绍 * Around环绕通知* 属性value 切入点表达式* 位置在方法定义的上面** 返回值Object 表示调用目标方法希望得到执行结果不一定是目标方法自己的返回值* 参数 ProceedingJoinPoint, 相当于反射中 Method。* 作用执行目标方法的等于Method.invoke()** public interface ProceedingJoinPoint extends JoinPoint {}** 特点* 1.在目标方法的前和后都能增强功能* 2.控制目标方法是否执行* 3.修改目标方法的执行结果。*Aspect public class MyAspect {//定义方法表示切面的具体功能/*环绕置通知方法的定义1方法是public2方法是必须有返回值 推荐使用Object类型3方法名称自定义4方法必须有ProceedingJoinPoint参数*/Around(execution(* *..SomeServiceImpl.doFirst(..)))public Object myAround(ProceedingJoinPoint pjp) throws Throwable {Object methodReturn null;System.out.println(执行了环绕通知在目标方法之前输出日志时间 new Date());//执行目标方法 ProceedingJoinPoint表示doFirstmethodReturn pjp.proceed();//method.invoke(),表示执行doFirst()方法本身if( methodReturn ! null){methodReturn 环绕通知中修改目标方法原来的执行结果;}System.out.println(环绕通知在目标方法之后增加了事务提交功能);//return HelloAround,不是目标方法的执行结果;//返回目标方法执行结果。没有修改的。return methodReturn;}}测试 Testpublic void test02(){String configapplicationContext.xml;ApplicationContext ctx new ClassPathXmlApplicationContext(config);SomeService service (SomeService) ctx.getBean(someService);String ret service.doFirst(zhangsan);System.out.println(ret调用目标方法的结果ret);}执行结果 ✨异常通知AfterTrowing 业务接口和实现类 public interface SomeService {void doSecond(String name); }Service public class SomeServiceImpl implements SomeService {Overridepublic void doSecond(String name) {System.out.println(执行业务方法doSecond,处理库存(10/0));} }切面类 Aspect public class MyAspect {//定义方法表示切面的具体功能/*异常通知方法的定义1方法是public2方法是没有返回值。是void3方法名称自定义4方法有参数是Exception*//*** AfterThrowing:异常通知* 属性 value 切入点表达式* throwing 自定义变量表示目标方法抛出的异常。* 变量名必须和通知方法的形参名一样* 位置在方法的上面* 特点* 1. 在目标方法抛出异常后执行的 没有异常不执行* 2. 能获取到目标方法的异常信息。* 3. 不是异常处理程序。可以得到发生异常的通知 可以发送邮件短信通知开发人员。* 看做是目标方法的监控程序。** 异常通知的执行* try{* SomeServiceImpl.doSecond(..)* }catch(Exceptoin e){* myAfterThrowing(e);* }*/AfterThrowing(value execution(* *..SomeServiceImpl.doSecond(..)),throwing ex)public void myAfterThrowing(Exception ex){System.out.println(异常通知在目标方法抛出异常时执行的异常原因是ex.getMessage());/*异常发生可以做1.记录异常的时间位置等信息。2.发送邮件短信通知开发人员*/}}测试 Testpublic void test01(){String configapplicationContext.xml;ApplicationContext ctx new ClassPathXmlApplicationContext(config);SomeService service (SomeService) ctx.getBean(someService);service.doSecond(lisi);}执行结果 ✨ 最终通知After 业务接口和实现类 public interface SomeService {void doThird(); }Service public class SomeServiceImpl implements SomeService {Overridepublic void doThird() {System.out.println(执行了业务方法doThird());} }切面类 Aspect public class MyAspect {//定义方法表示切面的具体功能/*最终通知方法的定义1方法是public2方法是没有返回值。是void3方法名称自定义4方法没有参数*//*** After最终通知* 属性 value 切入点表达式* 位置 在方法的上面* 特点* 1. 在目标方法之后执行的。* 2. 总是会被执行。* 3. 可以用来做程序最后的收尾工作。例如清除临时数据变量。 清理内存** 最终通知* try{* SomeServiceImpl.doThird(..)* }finally{* myAfter()* }*/After(value execution(* *..SomeServiceImpl.doThird(..)))public void myAfter(){System.out.println(最终通知总是会被执行的);}} 测试 Testpublic void test01(){String configapplicationContext.xml;ApplicationContext ctx new ClassPathXmlApplicationContext(config);SomeService service (SomeService) ctx.getBean(someService);service.doThird();} 执行结果 ✨Pointcut定义和管理切入点注解 Aspect public class MyAspect {Before(value mypt())public void myBefore(){System.out.println(前置通知在目标方法之前先执行的);}After(value mypt())public void myAfter(){System.out.println(最终通知总是会被执行的);}/*** Pointcut: 定义和管理切入点不是通知注解。* 属性 value 切入点表达式* 位置 在一个自定义方法的上面 这个方法看做是切入点表达式的别名。* 其他的通知注解中可以使用方法名称就表示使用这个切入点表达式了*/Pointcut(execution(* *..SomeServiceImpl.doThird(..)))private void mypt(){//无需代码} }✨总结 AOP是一种动态的技术思想目的是实现业务功能和非业务功能的解耦合。业务功能是独立的模块其他功能也是独立的模块。例如事务功能日志等等。让这些事务日志功能是可以被复用的。 当目标方法需要一些功能时可以在不修改不能修改源代码的情况下使用aop技术在程序执行期间生成代理对象通过代理执行业务方法同时增加功能。 投票传送门欢迎伙伴们投票
http://www.w-s-a.com/news/277752/

相关文章:

  • 唐山网站建设费用网站title优化
  • 网站建设公司做销售好不好海南在线新闻中心
  • title 镇江网站建设wordpress 获取用户密码
  • 品牌型网站建设wordpress+js插件开发教程
  • 免费注册微信网站国家企业年审营业执照官网
  • 建设银行网站 无法访问东莞淘宝运营
  • 做家电网站做网站美工需要会什么软件
  • 深圳营销型定制网站开发1000建设银行网站特点分析
  • 安装网站系统重庆知名网站
  • 巴彦淖尔市 网站建设怀化北京网站建设
  • 内部网站管理办法建立网站后台
  • 自学考试网站建设与管理郑州网站建设开拓者
  • 宁夏制作网站公司慈溪建设集团网站
  • 国家企业官方网站查询系统站酷设计网站官网入口文字设计
  • 彩票网站开发制作需要什么wordpress连接微博专业版v4.1
  • 孝感建设银行官网站百度一下你就知道啦
  • 做网站如何做视频广告制作公司简介怎么写
  • 做网站 买空间商务网站内容建设包括
  • 萝岗网站建设为什么点不开网站
  • 惠州网站制作询问薇北京网站建设最便宜的公司
  • 注册网站英语怎么说wordpress 3.8.3
  • 甘肃张掖网站建设网站开发软件是什么专业
  • 海口省建设厅网站网站数据库怎么做同步
  • 做网站建设月收入多少app开发公司广州英诺
  • 新闻播报最新网站优化外包费用
  • wordpress分页出现404最专业的seo公司
  • 连云港网站建设电话连云港市建设局网站
  • 平面设计网站有哪些比较好drupal网站建设 北京
  • 健康资讯网站模板网页价格表
  • 2008发布asp网站宝安建网站的公司