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

网站建设向上滚动代码培训班招生方案

网站建设向上滚动代码,培训班招生方案,amazon美国fba,电商平台代运营公司AOP(面向切面编程),或多或少都听过一点。名字比较怪,切面,不容易理解,但其中真正含义,无非就是旁路控制,非侵入式编码之类。比如我想加个操作日志功能,利用AOP&#xff0…

AOP(面向切面编程),或多或少都听过一点。名字比较怪,切面,不容易理解,但其中真正含义,无非就是旁路控制,非侵入式编码之类。比如我想加个操作日志功能,利用AOP,无须每个操作都加一个记录功能,只需写一个,就惠泽全部。

这个是怎么做到的呢?也没有太玄妙的东西,原理类似于过滤器、拦截器,在底层和全局性的地方做了处理,各个业务功能都流经这些关卡。
在这里插入图片描述

一、过滤器、拦截器与AOP

据说,过滤器、拦截器、AOP三者功能类似,但各有优势,从过滤器 》拦截器 》切面,拦截规则越来越细致,执行顺序依次是过滤器、拦截器、切面。一般情况下数据被过滤的时机越早对服务的性能影响越小,因此我们在编写相对比较公用的代码时,优先考虑过滤器,然后是拦截器,最后是AOP。

AOP使用的主要是动态代理 , 过滤器使用的主要是函数回调;拦截器使用是反射机制 。一个请求过来,先进行过滤器处理,看程序是否受理该请求 。 过滤器放过后 , 程序中的拦截器进行处理 ,处理完后进入 被 AOP动态代理重新编译过的主要业务类进行处理 。

Filter:和框架无关,过滤器拦截的是URL,可以控制最初的http请求,但是更细一点的类和方法控制不了。

Interceptor:拦截器拦截的也是URL,拦截器有三个方法,相对于过滤器更加细致,有被拦截逻辑执行前、后等。

AOP:面向切面拦截的是类的元数据(包、类、方法名、参数等) 相对于拦截器更加细致,而且非常灵活,拦截器只能针对URL做拦截,而AOP针对具体的代码,能够实现更加复杂的业务逻辑。

二、Spring Boot中应用AOP

1、pom.xml

引入依赖包

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、面向切面类

1)写一个方法用于测试

为方便测试,写一个控制器。再简单不过的控制器。

TestController.java

package com.chenqu.bullshit.modules.work.controller;@RestController
@RequestMapping("test1")
public class TestController {@ResponseBody@RequestMapping("/hello")public String sayHello(){System.out.println("hello");return "hello";}
}

2)面向切面的类

然后写一个面向切面的类。就像配置、过滤器、拦截器一样,写出来之后,系统(准确来说,应该是容器?)会自动解释它,于是面向切面开始生效。

TestAdvice.java

@Aspect
@Component
public class TestAdvice {//指示哪些方法将会受到影响。Pointcut,切入点@Pointcut("execution (* com.chenqu.bullshit.modules.work.controller.TestController.*(..))")public void test1() {}@Before("test1()")public void beforeAdvice() {System.out.println("beforeAdvice...");}@After("test1()")public void afterAdvice() {System.out.println("afterAdvice...");}@Around("test1()")public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {System.out.println("before");try {proceedingJoinPoint.proceed();} catch (Throwable t) {t.printStackTrace();}System.out.println("after");}
}

上述代码中,首先类使用了标注“@Aspect”,表明这是一个面向切面的类。

类中void test1()使用了标注“@Pointcut”。Pointcut者,切入点也。它里面的内容,指示了哪些方法将会受到影响。在这里,指向了我们用于测试的控制器。如果是想指向所有的控制器,可以这样写:

@Pointcut("execution (* com.chenqu.bullshit.modules.work.controller.*.*(..))")

在这里插入图片描述
至于其他的什么@Before、@After、@Arround,无非就是切入前执行、切入后执行、切入时执行,顾名思义。

运行代码,用浏览器访问

http://localhost:8090/test1/hello

控制台输出如下:
在这里插入图片描述

3、execution 与 annotation

execution与annotation都是Pointcut的2种常用执行方式,除此而外,还有什么within、this、target之类乱七八糟的,一大群,让人头大。常用的就是execution与annotation。execution如上例,就是指明会影响哪些方法;而annotation是注解的意思,指明会影响带哪些注解的方法,或者说,如果方法带上指定的注解,就会受到影响。

1)添加一个名为NeedTest的注解

NeedTest.java

@Target({ElementType.METHOD,ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface NeedTest {String value() default "";
}

2)然后将上面例子中TestAdvice.java,Pointcut的执行方式由execution 改为 annotation,其余保持不变。

@Aspect
@Component
public class TestAdvice {@Pointcut("@annotation(com.chenqu.bullshit.modules.annotation.NeedTest)")public void test1() {}@Before("test1()")public void beforeAdvice() {System.out.println("beforeAdvice...");}@After("test1()")public void afterAdvice() {System.out.println("afterAdvice...");}@Around("test1()")public void aroundAdvice(ProceedingJoinPoint proceedingJoinPoint) {System.out.println("before");try {proceedingJoinPoint.proceed();} catch (Throwable t) {t.printStackTrace();}System.out.println("after");}}

3)修改用于测试的控制器TestController.java,方法带上@NeedTest注解

package com.chenqu.bullshit.modules.work.controller;@RestController
@RequestMapping("test1")
public class TestController {@NeedTest@ResponseBody@RequestMapping("/hello")public String sayHello(){System.out.println("hello");return "hello";}
}

运行结果跟上面一样,效果一致。

三、小结

从网上搜索出来的,有关spring boot aop的使用资料,绝大部分都很难懂。说了一大堆,根本不知道在说什么,也许作为手册供查阅是极好的。本文从我个人学习的角度出发,记录一下心得。

参考文章:
Spring Boot使用AOP的正确姿势

http://www.jinmujx.cn/news/78044.html

相关文章:

  • js判断是手机还是电脑访问网站今日新闻国际头条新闻
  • 客服外包接单平台seo怎么做关键词排名
  • 为外国企业做中文网站建设关键词优化软件排行
  • wordpress 建站 搜索天津网站优化
  • 做网站的计划58黄页网推广公司
  • 互联网站建设维护注册推广赚钱一个40元
  • 胶州网站建设电话百度刷排名优化软件
  • 河北省建设厅网站登陆设置培训加盟
  • 网站建设 银川太原优化排名推广
  • 网站外链作用nba今日数据
  • 下列哪些不属于企业网站建设基本原则目前引流最好的平台
  • 淄博网站建设电话咨询小说网站排名人气
  • 网站建设内部下单流程图连云港百度推广总代理
  • 做画册找什么网站百度 营销推广多少钱
  • 网站建设好还是阿里巴巴好网站快速收录技术
  • 电脑做试卷的网站全网热搜榜第一名
  • wordpress添加百度统计武汉seo首页优化公司
  • 建站abc登录入口百度定位店铺位置怎么设置
  • 西直门网站建设公司百度搜索关键词技巧
  • 小米应用商店下载seo关键词优化排名推广
  • 网站建设shundeit昆明seo案例
  • 点网站建设seo关键词优化推广外包
  • 百度公司做网站可靠吗关键洞察力
  • 网站建设 枫子科技百度关键词优化查询
  • 怎么做可以使网站跳转网站建设平台官网
  • wordpress全站公告公司网站建设服务机构
  • 网站制作帐户设置广告联盟大全
  • 网站系统功能流程图厦门seo网络推广
  • 网站备案时间太长爱上链外链购买平台
  • 网站首页设计教程seo优化上首页