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

怎样做违法网站网络工程是什么

怎样做违法网站,网络工程是什么,seo推广员是做什么的,百度快速排名软件下载目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重复使用, Spring提供了PointCut注解, 把公共的切点表达式提取出来, 需要用到时引入切点表达式即可. Slf4j Component Aspect public class AspectDemo {//声明一个切点Pointcut(execution(* com.bite.aop.controller.*.*(..)))public void pt(){}; //切点名称:pt()Before(pt())public void doBefore() {//此处省略...}After(pt())public void doAfter() {//此处省略...}Around(pt())public Object doAround(ProceedingJoinPoint joinPoint) throws Throwable {//此处省略...}AfterReturning(pt())public void doAfterReturning() {//此处省略...} }当切点定义为private修饰时, 仅能在当前切面类使用, 当其他切面类也要使用当前切点定义时, 就需要把private改为public. 引用方式为: 全限定类名.方法名() 使用示例: Slf4j Aspect Component public class AspectDemo2 {//前置通知Before(com.example.demo.aspect.AspectDemo.pt())public void doBefore() {log.info(卢本伟牛逼);} } 切面优先级Order 当我们在一个项目中, 定义了多个切面类时, 并且这些切面类的多个切入点都匹配到了同一个目标方法. 当目标方法运行的时候, 这些切面类中的通知方法都会执行, 那么这些通知方法的执行顺序是怎样的呢? 还是通过程序求证: 定义多个切面类如下: Component public class AspectDemo2 {Pointcut(execution(* com.example.demo.controller.*.*(..)))private void pt(){}//前置通知Before(pt())public void doBefore() {log.info(执⾏ AspectDemo2 - Before ⽅法);}//后置通知After(pt())public void doAfter() {log.info(执⾏ AspectDemo2 - After ⽅法);} }Component public class AspectDemo3 {Pointcut(execution(* com.example.demo.controller.*.*(..)))private void pt(){}//前置通知Before(pt())public void doBefore() {log.info(执⾏ AspectDemo3 - Before ⽅法);}//后置通知After(pt())public void doAfter() {log.info(执⾏ AspectDemo3 - After ⽅法);} }Component public class AspectDemo4 {Pointcut(execution(* com.example.demo.controller.*.*(..)))private void pt(){}//前置通知Before(pt())public void doBefore() {log.info(执⾏ AspectDemo4 - Before ⽅法);}//后置通知After(pt())public void doAfter() {log.info(执⾏ AspectDemo4 - After ⽅法);} } 运行指定接口,可以得到日志: 通过上述程序的运行结果, 可以看出: 存在多个切面类时, 默认按照切面类的类名字母排序: Before通知: 字母排名靠前的先执行; After通知: 字母排名靠后的后执行.  但是哥们不想这么搞, 哥们想让它们按照哥们的想法排序, 到这里我们就可以使用Order来对切面优先级排序. 使用方式如下: Aspect Component Order(2) public class AspectDemo2 {//代码省略... }Aspect Component Order(1) public class AspectDemo3 {//代码省略... }Aspect Component Order(3) public class AspectDemo4 {//代码省略... } 执行结果如下: 通过上述程序的运行结果, 得出结论:  Order注解标识的切面类, 执行顺序如下: Before通知: 数字越小先执行 After通知: 数字越大先执行 Order控制切面的优先级控制切面的优先级, 先执行优先级较高的切面, 在执行优先级较低的切面, 最终执行目标方法. 切点表达式 上面的代码中, 我们一直在使用切点表达式来描述切点,  下面我们来介绍一下切点表达式的语法. 切点表达式常见有两种表达方式 1.execution(......): 根据方法的签名来匹配 2.annotation(......): 根据注解来匹配.  execution表达式 execution()作为常用的表达式, 语法为: execution(访问修饰符 返回类型 包名.类名.方法(方法参数) 异常)  其中: 访问修饰符和异常可以省略.  切点表达式支持通配符表达: 1. * : 匹配任意字符, 只匹配任意一个元素(返回类型, 包, 类名, 方法名, 方法参数)  2. .. :匹配多个连续的任意符号, 可以通配任意层级的包, 或任意类型, 任意个数的参数  切点表达式示例 TestController下的public 修饰, 返回类型为String方法名为t1, 无参方法 execution(public String com.example.demo.controller.TestController.t1()) 省略访问修饰符: ​execution(String com.example.demo.controller.TestController.t1())匹配所有类型: execution(* com.example.demo.controller.TestController.t1())匹配TestController下的所有无参方法: execution(* com.example.demo.controller.TestController.*())匹配TestController下的所有方法 ​execution(* com.example.demo.controller.TestController.*(..)) 匹配controller包下所有类的所有方法: ​​execution(* com.example.demo.controller.*.*(..)) 匹配所有包下的TestController ​execution(* com..TestController.*(..)) annotation execution表达式更适用于有规则的, 如果我们要匹配出多个无规则的方法呢? 比如: 匹配TestController中的t1(), 和UserController中的u1()这两个方法. 这个时候使用execution就不是很方便了, 因此这里引入annotation来表示这一类的切点.  实现步骤: 1.编写自定义注解 2.使用annotation表达式来描述切点 3.在连接点的方法上添加自定义注解. 准备测试代码: Slf4j RequestMapping(/test) RestController public class TestController {MyAspectRequestMapping(/t1)public String t1() {log.info(执行t1方法...);return t1;}RequestMapping(/t2)public boolean t2() {log.info(执行t2方法);return true;} }Slf4j RequestMapping(/user) RestController public class UserController {RequestMapping(/u1)public String u1() {log.info(执行u1方法...);return u1;}MyAspectRequestMapping(/u2)public boolean u2() {log.info(执行u2方法);return true;} }自定义注解MyAspect 创建一个注解类: 定义如下代码: //注解类型 Target({ElementType.METHOD}) //注解生命周期 Retention(RetentionPolicy.RUNTIME) public interface MyAspect {} 这里只做简单说明, 不必深究: 1.Target标识了Annotation所修饰对象的范围, 即该注解用于什么地方(上文就是用于方法) 2.Retention指Annotation被保留的时间长短, 标明注解的生命周期.  切面类 使用annotation切点表达式定义切点, 只对MyAspect生效. 切面类代码如下: Slf4j Component Aspect public class MyAspectDemo {//前置通知Before(annotation(com.example.demo.aspect.MyAspect))public void before() {log.info(MyAspect - before ...);}//后置通知After(annotation(com.example.demo.aspect.MyAspect))public void after() {log.info(MyAspect - after ...);} } 添加自定义注解 在TestController中的t1()和 UserController中的u1()这两个方法上添加自定义注解 MyAspect. MyAspectRequestMapping(/t1)public String t1() {log.info(执行t1方法...);return t1;}MyAspectRequestMapping(/u2)public boolean u2() {log.info(执行u2方法);return true;} 顺利执行. Spring AOP实现方式(常见面试题) 1.基于注解Aspect 2.基于自定义注解 3.基于Spring API(现在很少见) 4.基于代理实现(笨重, 不建议使用).
http://www.yayakq.cn/news/4038/

相关文章:

  • 网站开发如何避开法律广告公司网站官网
  • 做qq代刷网站做网站需要投标吗
  • 网站代理网站网站建设app开发 微信小程序 网站开发 自动脚本
  • 新浪网站建设的目的广东佛山建网站
  • 安康市城市建设局网站深圳app定制开发多少钱
  • 绿色大气网站模板贵阳公司官方网站建设
  • 263企业邮箱登录口seo积分系统
  • 中国优秀网站设计免费策划方案平台
  • 腾讯网站建设费用食品包装设计网站
  • 一般网站的服务器程序员必备工具
  • farfetch 购物网站百度如何免费推广
  • 正规企业网站开发使用方法wordpress备案
  • 17来做网站做的好的农产品网站
  • 铜川新区网站建设招标广州网站排名怎么优化
  • 英文外贸网站建设网站设计方案2345影视大全可以放心下载吗
  • 建设申请网站首页怎么写网站建设推广
  • wordpress网站地图插件最专业的做音乐网站
  • 平台建设上线网站网站开发前端要学什么软件
  • vs做网站视频教程软件开发培训学校杭州
  • dw网站设计与制作淘宝的好券网站怎么做
  • 外国人的做视频网站如何设计一个网页页面
  • 任丘网站优化wordpress文章收缩
  • 村级网站建设助力脱贫攻坚flash怎么做网页
  • 网站快速收录怎么制作网站详细教程视频
  • 外贸网站建设软件有哪些腾讯微博同步到wordpress
  • 防蜘蛛抓取网站代码中牟网络推广外包
  • 制作一个网站代码网站怎么优化 优帮云
  • 网站建设简介是什么国外常用的网站开发系统
  • c 做网站 知乎滁州建设网站公司
  • linux建站和wordpress无锡专业网络推广公司