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

做图片网站咋样缅甸做网站

做图片网站咋样,缅甸做网站,重庆在线开放,石家庄谷歌seo公司目录 一.AOP是什么 二.案例演示 1.前置通知1.1 先准备接口 1.2然后再准备好实现类 1.3对我们的目标对象进行JavaBean配置 1.4 编写前置系统日志通知 1.5配置系统通知XML中的JavaBean 1.6 配置代理XML中的JavaBean 1.7 测试代码开始测试 注意这里有一个报错问题 2. 后置通知2.1 先准备好后置通知的系统日志 2.2 配置后置系统通知的XML的JavaBean 2.3 测试结果 3.环绕通知 3.2 环绕通知的系统日志 3.3 配置环绕通知的XML的JavaBean与前置通知和后置通知一致 3.4 测试结果 4.异常通知4.1 异常通知的系统日志和其他系统日志不同的是方法名为固定的afterThrowing不能修改 5.过滤通知5.1 直接在XML中配置JavaBean 四.总结aop是面向切面编程普通程序由上而下正常执行aop的程序执行是先执行到目标对象的目标方法中如果连接点上由前置通知则先执行前置通知再执行目标方法最后如果目标方法有后置通知则最后执行后置通知代码不管是前置通知后置通知环绕通知异常通知过滤通知代码都是非业务核心代码如日志、事务的管理开启、提交、回滚          一.AOP是什么 简介面向切面编程Aspect-Oriented Programming是一种编程范式它的主要目的是通过预编译和运行期动态代理实现程序功能的横切cross-cutting特性如日志记录、性能统计、事务监控等。它可以帮助开发者将这些原本分散在各个方法或类中的业务逻辑抽象出来提高代码复用性降低耦合度 AOPAspect-Oriented Programming是Spring框架的一个重要特性它通过将横切关注点cross-cutting concerns从核心业务逻辑中分离出来以模块化的方式在整个应用程序中重复使用。以下是关于AOP的简介及其特点 AOP是一种编程范式它通过将横切关注点切割出来将其模块化并将其应用于多个类和模块以提高代码的重用性和可维护性。 横切关注点是指与核心业务逻辑无关但存在于多个类或模块中的非功能性需求例如日志记录、性能监控、事务管理等。 特点 模块化AOP允许将横切关注点从核心业务逻辑中提取出来形成独立的切面Aspect使得关注点的逻辑可以独立于各个模块。 解耦AOP通过解耦横切关注点与核心业务逻辑使得它们可以独立演化和变化提高了模块之间的松耦合程度。 重用性AOP允许将切面应用于多个类和模块从而实现了关注点的重用避免了代码的重复编写。 可维护性将横切关注点抽象为切面后使得代码结构更清晰易于理解和维护。 动态性AOP可以在运行时动态地将切面应用到目标对象上而不需要修改目标对象的源代码增强了系统的灵活性和可扩展性。 多样性Spring框架支持不同类型的切面编程包括基于代理的AOP和基于字节码增强的AOP。这样可以选择最适合应用程序需求的AOP实现方式。 在Spring框架中AOP的实现采用了代理模式和动态代理技术。Spring提供了多种AOP的实现方式包括基于XML配置的AOP、基于注解的AOP和基于纯Java配置的AOPJavaConfig等开发者可以根据具体需求选择适合的方式来配置和使用AOP。   面向切面 1.专业术语 ①目标对象 专业解释被通知(被代理)的对象 通俗理解在书店中商品就是目标。每个商品都有自己的属性比如价格、名称、库存等和行为比如计算促销价格、更新库存等。收银员通过扫描商品的条形码来与商品进行交互调用商品的方法来获取商品信息以及执行一些操作。商品本身即代表了目标 ②连接点 专业解释程序执行过程中明确的点如方法的调用或者异常的抛出 通俗理解在书店中我们可以将顾客结账的行为看作一个连接点 ③通知 专业解释在某个特定的连接点上执行的动作同时Advice也是程序代码的具体实现例如一个实现日志记录的代码(通知有些书上也称为处理) 通俗理解 前置通知Before Advice在切入点前执行的代码在读者购买图书之前我们可以记录读者购买的图书信息 后置通知After Advice在切入点后执行的代码在读者购买图书之后我们可以更新图书库存 环绕通知Around Advice在切入点前后都执行的代码我们可以对读者进行额外的安全检查和记录日志 异常通知After-Throwing Advice异常通知是在切入点发生异常时执行的额外功能代码。假设当顾客购买商品的数量大于库存数量时就会发生异常。我们希望在顾客购买商品时检查库存并在发生异常时执行异常通知向顾客显示错误信息并处理异常情况 过滤通知After-Returning Advice过滤通知是在切入点成功执行后执行的额外功能代码。假设我们有一个特殊会员组他们在购买商品时可以获得额外的积分。我们可以使用过滤通知来筛选出这些特殊会员并在成功购买后给他们添加积分 ④代理 专业解释将通知应用到目标对象后创建的对象(代理目标通知) 通俗理解在书店中收银员是一个代理角色。他们既代表顾客与商品交互又代表书店执行一些额外的任务。当顾客带着商品到收银台时收银员会扫描每个商品的条形码获取商品信息并计算总价。这里收银员即充当了顾客与商品之间的代理角色也充当了超市执行计算总价等额外任务的代理角色 ⑤切入点 专业解释 多个连接点的集合定义了通知应该应用到那些连接点 (也将Pointcut理解成一个条件 此条件决定了容器在什么情况下将通知和目标组合成代理返回给外部程序) 通俗理解在书店场景中我们可能希望在计算折扣方法之前或之后记录日志和进行库存管理。这些切入点决定了我们在代码中操作的位置 ⑥适配器 专业解释适配器是一个中间组件用于将面向切面编程框架与原始的业务逻辑代码连接起来适配器通知(Advice)切入点(Pointcut) 通俗理解在书店场景中适配器可以将代理对象与书店的购买图书业务逻辑连接起来使得代理对象能够在购买图书的过程中添加额外的功能 2.代码演示         在上面场景模拟的代码中我们能够发现记录日志的代码基本相同那么有没有可能将这部分的代码抽取出来进行封装统一进行维护呢同时也可以将日志代码和业务代码完全分离解耦合   那么我们便可以将业务方法中的非业务核心代码(日志记录)抽离出来形成一个横切面并且将这个横切面封装成一个对象将所有的记录日志的代码写到这个对象中以实现与业务代码的分离这便是面向切面编程的思想 2.1将记录日志的代码进行封装   三.案例演示  1.前置通知 1.1 先准备接口 package com.lya.aop.biz;public interface IBookBiz {// 购书public boolean buy(String userName, String bookName, Double price);// 发表书评public void comment(String userName, String comments); } 1.2然后再准备好实现类 package com.lya.aop.biz.impl;import com.YU.aop.biz.IBookBiz; import com.YU.aop.exception.PriceException;public class BookBizImpl implements IBookBiz {public BookBizImpl() {super();}public boolean buy(String userName, String bookName, Double price) {// 通过控制台的输出方式模拟购书if (null price || price 0) {throw new PriceException(book price exception);}System.out.println(userName buy bookName , spend price);return true;}public void comment(String userName, String comments) {// 通过控制台的输出方式模拟发表书评System.out.println(userName say: comments);}} 1.3对我们的目标对象进行JavaBean配置  !--目标对象--     bean classcom.lya.aop.biz.impl.BookBizImpl idbookBiz/bean 1.4 编写前置系统日志通知 package com.lya.aop.advice;import java.lang.reflect.Method; import java.util.Arrays;import org.springframework.aop.MethodBeforeAdvice;/*** 买书、评论前加系统日志* author YU**/ public class MyMethodBeforeAdvice implements MethodBeforeAdvice {Overridepublic void before(Method arg0, Object[] arg1, Object arg2) throws Throwable { //        在这里可以获取到目标类的全路径及方法及方法参数然后就可以将他们写到日志表里去String target arg2.getClass().getName();String methodName arg0.getName();String args Arrays.toString(arg1);System.out.println(【前置通知系统日志】target.methodName(args)被调用了);}} 1.5配置系统通知XML中的JavaBean !--通知--     bean classcom.lya.aop.advice.MyMethodBeforeAdvice idmyMethodBeforeAdvice/bean 1.6 配置代理XML中的JavaBean !-- 代理--bean classorg.springframework.aop.framework.ProxyFactoryBean idbookProxy!-- 配置目标对象 --property nametarget refbookBiz/property!-- 配置代理接口目标对象的接口 --property nameproxyInterfacesvaluecom.YU.aop.biz.IBookBiz/value/propertyproperty nameinterceptorNameslistvaluemyMethodBeforeAdvice/value/list/property/bean 1.7 测试代码开始测试 package com.lya.util;import com.lya.biz.IBookBiz; import org.springframework.context.support.ClassPathXmlApplicationContext;/*** author 程序猿-小李哥* site www.xiaolige.com* company 猪八戒有限集团* create 2023-08-17-15:34*/ public class Demo {public static void main(String[] args) { // 今天所学 // 1.AOP的介绍专心做事// 2专业术语 // 1.连接点 // 2.通知前后环绕 // 3.目标 // 4.代理 // 代理目标通知// 3配置xml初始化Spring容器IOCClassPathXmlApplicationContext context new ClassPathXmlApplicationContext(spring.xml);// 演示一目标对象 // BookBizImpl bookBiz context.getBean(bookTarget,BookBizImpl.class); // bookBiz.buy(晓东,欠你一夜,2000d); // bookBiz.comment(晓东,不看亏了看了真爽啊);// 演示二前置通知 // 错误类型强转Object proxy1 context.getBean(proxy);System.out.println(proxy1.getClass()代理的类型); // com.sun.proxy.$Proxy5代理的类型// 这里proxynew bookbizimpl // BookBizImpl proxy context.getBean(proxy,BookBizImpl.class); // proxy.buy(晓东,欠你一夜,2000d); // proxy.comment(晓东,不看亏了看了真爽啊);// 使用接口接收代理对象因为代理对象实现了接口在xml中IBookBiz proxy context.getBean(proxy,IBookBiz.class);proxy.buy(晓东,欠你一夜,2000d);proxy.comment(晓东,不看亏了看了真爽啊);} }注意这里有一个报错问题 因为proxy代理已经实现了接口可以看作为一个实现类 使用接口接收代理对象因为代理对象实现了接口在xml中 测试结果 由测试结果可得知不仅获取到了我们的参数同时根据方法获取到了我们的系统日志也就是前置通知 2. 后置通知 2.1 先准备好后置通知的系统日志 package com.zking.aop.advice;import java.lang.reflect.Method; import java.util.Arrays;import org.springframework.aop.AfterReturningAdvice;/*** 买书返利* author Administrator**/ public class MyAfterReturningAdvice implements AfterReturningAdvice {Overridepublic void afterReturning(Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {String target arg3.getClass().getName();String methodName arg1.getName();String args Arrays.toString(arg2);System.out.println(【后置通知买书返利】target.methodName(args)被调用了该方法被调用后的返回值为arg0);}} 2.2 配置后置系统通知的XML的JavaBean !--后置通知--     bean classcom.YU.aop.advice.MyAfterReturningAdvice idmyAfterReturningAdvice/bean 并在前面已经配置好的代理接口中添加一个value值 2.3 测试结果 由测试结果我们可以得知后置通知永远都在方法执行后才会显示通知与前置通知不同的是每次前面的方法调用后都会返回一个参数 3.环绕通知 3.1 环绕通知就是前置通知和后置通知的结合在实际应用开发中我们一般不会单独编写前置通知和后置通知单独使用前置通知或者后置通知时我们会使用环绕通知将里面前置后置通知的功能注释以达到单独使用的目的 3.2 环绕通知的系统日志 package com.lya.advice;import org.aopalliance.intercept.MethodInterceptor; import org.aopalliance.intercept.MethodInvocation;import java.util.Arrays;/*** author 程序猿-小李哥* site www.xiaolige.com* company 猪八戒有限集团* create 2023-08-17-18:45** 环绕通知*/ public class AroundAdvice implements MethodInterceptor {Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {//获取目标对象的执行方法String methodNameinvocation.getMethod().getName();//获取目标对象执行方法的参数Object[] paramsinvocation.getArguments();//获取目标对象Object target invocation.getThis();System.out.println([环绕通知] target.getClass().getName().methodName, 执行的参数 Arrays.toString(params));Object returnValue invocation.proceed(); //放行操作System.out.println([环绕通知] 返回参数等于returnValue);return returnValue;} }3.3 配置环绕通知的XML的JavaBean与前置通知和后置通知一致 3.4 测试结果 由测试结果得知环绕通知就是前置通知和后置通知的结合优点就是不需要再多次去进行配置及编码所以就像我们前面所说在实际开发应用中我们一般都会选择使用环绕通知 4.异常通知 4.1 异常通知的系统日志和其他系统日志不同的是方法名为固定的afterThrowing不能修改 package com.lya.advice;/*** author 程序猿-小李哥* site www.xiaolige.com* company 猪八戒有限集团* create 2023-08-17-18:56*/import org.springframework.aop.ThrowsAdvice;/*** 异常通知*/ public class ExceptionAdvice implements ThrowsAdvice {public void afterThrowing(PriceException e) {System.out.println([异常通知] 价格异常撤销订单);} }价格异常 package com.lya.advice;/*** author 程序猿-小李哥* site www.xiaolige.com* company 猪八戒有限集团* create 2023-08-17-19:04** 价格异常通知*/ public class PriceException extends RuntimeException {public PriceException() {super();}public PriceException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) {super(message, cause, enableSuppression, writableStackTrace);}public PriceException(String message, Throwable cause) {super(message, cause);}public PriceException(String message) {super(message);}public PriceException(Throwable cause) {super(cause);} }4.2 在我们正常程序出问题没有去配置异常通知时会出现报错并且不会执行后面的后置通知如以下情况 4.3 异常处理配置和前面的配置相同 4.4 当我们配置好异常通知模块时程序出现异常时会上报日志进行提示 5.过滤通知 5.1 直接在XML中配置JavaBean !--过滤通知--     bean classorg.springframework.aop.support.RegexpMethodPointcutAdvisor idregexpMethodPointcutAdvisor         property nameadvice refmyAfterReturningAdvice/property         property namepattern value.*buy/property     /bean 将图中指出部分替换成过滤通知 测试结果 对比框中内容在调用过buy方法后进行过滤第二次调用时不再buy方法而是comment方法  四.总结 aop是面向切面编程普通程序由上而下正常执行aop的程序执行是先执行到目标对象的目标方法中如果连接点上由前置通知则先执行前置通知再执行目标方法最后如果目标方法有后置通知则最后执行后置通知代码不管是前置通知后置通知环绕通知异常通知过滤通知代码都是非业务核心代码如日志、事务的管理开启、提交、回滚
http://www.yutouwan.com/news/145234/

相关文章:

  • 网站制作公司怎么找一个主机建多少个网站
  • 温州市手机网站制作多少钱wordpress 课程管理系统
  • 放心的网站建设代理咸宁网站开发
  • 建成局网站建设网站如何建设与优化
  • 怎样找到工厂直招网站WordPress不使用mysql
  • 拓普网站建设caddy下安装WordPress
  • 网站建设的物流wordpress 主页插件
  • 博物馆设计网站推荐千图网素材解析网站开发
  • 做外贸电商网站有哪个网站建设江苏百拓
  • 广东企业网站建设公司linux tomcat 网站目录
  • 苏州网站推广哪家好企业网站哪个平台好
  • 模块网站和定制网站区别免费app软件
  • 龙岗在线网站制作南通高端网站设计开发
  • 做fpga的网站珠海集团网站建设
  • 校园网站建设培训的心得体会临淄信息网最新招聘信息
  • 商城网站设计价格电商型网站
  • 广州企业网站建站公司哪家好做旅游网站需要引进哪些技术人才
  • 网站界面用什么做定制网站开发公司哪家好?点击查看
  • 手机网站制作报价表做简历比较好的网站叫什么
  • 怎么做企业网站排名临沂网站建设联系方式
  • 西安网站建设网站上海公交建设公司官网
  • 西安正邦网站建设贵州省城市建设厅网站
  • 阿里巴巴如何做网站wordpress官网中文版下载
  • 高端服装产品网站建设成都网站制作需要多少钱
  • 心理学网站开发广东知名网站建设
  • 农资网站建设响应式布局详解教程
  • wordpress define百度seo新站优化
  • wordpress下载资源站主题wordpress 标签页logo
  • 发布网站的空间莒县建设局官方网站
  • 境外公司在国内建网站vs2015做网站如何添加控件