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

24 手表网站php的网站架构建设框架

24 手表网站,php的网站架构建设框架,做网站到哪里接单,用wordpress仿一个网站模板1.什么是 AOP#xff1f; AOP#xff08;Aspect Oriented Programming#xff09;#xff1a;⾯向切⾯编程#xff0c;它是⼀种思想#xff0c;它是对某⼀类事情的集中处理 AOP是一种思想#xff0c;而Spring AOP是一个实现了AOP的思想框架#xff0c;他们的关系和IOC…1.什么是 AOP AOPAspect Oriented Programming⾯向切⾯编程它是⼀种思想它是对某⼀类事情的集中处理 AOP是一种思想而Spring AOP是一个实现了AOP的思想框架他们的关系和IOC与DI类似 2.为什要⽤ AOP 想象⼀个场景我们在做后台系统时除了登录和注册等⼏个功能不需要做⽤户登录验证之外其他⼏乎所有⻚⾯调⽤的前端控制器Controller都需要先验证⽤户登录的状态那这个时候我们要怎么处理呢 我们之前的处理⽅式是每个 Controller都要写⼀遍⽤户登录验证然⽽当你的功能越来越多那么你要写的登录验证也越来越多⽽这些⽅法⼜是相同的这么多的⽅法就会代码修改和维护的成本。那有没有简单的处理⽅案呢 有人说可以抽取一个公共方法出来每次需要验证的时候去调用这个方法就好了 这样做是可以的但是还存在一个问题如果登陆方法的参数发生改变那么每个调用者都需要跟着修改这样就会变得复杂并且代码之间耦合严重我们要尽量避免这种情况 开发的三个阶段 初级阶段每个方法都实现中级阶段抽取公共方法高级阶段采用AOP的方式 所以对于这种功能统⼀且使⽤的地⽅较多的功能就可以考虑 AOP来统⼀处理了 除了统⼀的⽤户登录判断之外AOP 还可以实现 统⼀⽇志记录统⼀⽅法执⾏时间统计在性能优化阶段监控流量接口的响应时间等甚至每个方法的响应时间为整个项目的性能进行优化统⼀的返回格式设置 对于接口的返回格式基本上都是codemessagedata统⼀的异常处理事务的开启和提交等 也就是说使⽤AOP 可以扩充多个对象的某个能⼒所以 AOP 可以说是 OOPObject OrientedProgramming⾯向对象编程的补充和完善 3.Spring AOP 应该怎么学习呢 Spring AOP 学习主要分为以下 3 个部分 学习 AOP 是如何组成的也就是学习 AOP 组成的相关概念。学习 Spring AOP 使⽤。学习 Spring AOP 实现原理。 3.1 AOP 组成 1 切⾯Aspect 切⾯Aspect由切点Pointcut和通知Advice组成它既包含了横切逻辑的定义也包括了连接点的定义。 切⾯是包含了通知、切点和切⾯的类相当于 AOP 实现的某个功能的集合 2 连接点Join Point 应⽤执⾏过程中能够插⼊切⾯的⼀个点这个点可以是⽅法调⽤时抛出异常时甚⾄修改字段时。切⾯代码可以利⽤这些点插⼊到应⽤的正常流程之中并添加新的⾏为 连接点相当于需要被增强的某个 AOP 功能的所有⽅法 3 切点Pointcut Pointcut 的作⽤就是提供⼀组规则使⽤ AspectJ pointcut expression language 来描述来匹配 Join Point给满⾜规则的 Join Point 添加 Advice 切点相当于保存了众多连接点的⼀个集合如果把切点看成⼀个表⽽连接点就是表中⼀条⼀条 的数据 4 通知Advice 通知定义了切⾯是什么何时使⽤其描述了切⾯要完成的⼯作还解决何时执⾏这个⼯作的问题 AOP是对于同一类事情范围的集中处理处理的内容是什么 对于AOP而言处理的内容就是通知切⾯的⼯作被称之为通知 Spring 切⾯类中可以在⽅法上使⽤以下注解会设置⽅法为通知⽅法在满⾜条件后会通知本⽅法进⾏调⽤ 前置通知使⽤ Before通知⽅法会在⽬标⽅法调⽤之前执⾏。后置通知使⽤ After通知⽅法会在⽬标⽅法返回或者抛出异常后调⽤返回之后通知使⽤ AfterReturning通知⽅法会在⽬标⽅法返回后调⽤。抛异常后通知使⽤ AfterThrowing通知⽅法会在⽬标⽅法抛出异常后调⽤。环绕通知使⽤ Around通知包裹了被通知的⽅法在被通知的⽅法通知之前和调⽤之后执 ⾏⾃定义的⾏为。 在jointPoint.proceed()前后都可以通知 注意返回结果需要自己定义 4.我们就以用户登陆验证来举例 1.首先我们需要创建一个springMVC的项目 参考博客 spring项目的创建 2.在pop.xml中添加以下配置 !-- https://mvnrepository.com/artifact/org.springframework.boot/spring-bo ot-starter-aop -- dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-aop/artifactId /dependency3.创建一个UserController类模拟用户需要执行的一些方法 /*** 用户需要调用的一些方法*/ Slf4j // 用来打印日志的 RestController RequestMapping(/user) public class UserController {// 获取用户信息RequestMapping(/get)public String getInfo() {return 获取信息;}// 注册RequestMapping(/reg)public String reg() {return 注册;}// 登录RequestMapping(/log)public String log() {return 登录;}} 4.定义切面和切点 切面就是具体要处理的某一类问题比如用户登录权限验证就是一个具体的问题切点的作用就是制定一组规则,(比如在这里我们就要制定哪些方法可以走到切面的类里面来就是拦截那些需要验证用户身份的操作) pointcut()注解内的切点表达式说明 1.AspectJ ⽀持三种通配符 切点表达式由切点函数组成其中 execution() 是最常⽤的切点函数⽤来匹配⽅法语法为 execution(修饰符返回类型包.类.⽅法(参数)异常) 2.表达式示例 Slf4j // 用来打印日志的 Component // 将此类交给spring容器来管理 Aspect // 表示此类为一个切面 public class LoginAspect {// 定义一个切点Pointcut(execution(* com.example.springaop.controller.UserController.* (..)))public void pointcut() {//其中 pointcut ⽅法为空⽅法它不需要有⽅法体此⽅法名就是起到⼀个“标识”的作⽤标识下⾯的通知⽅法具体指的是哪个切点因为切点可能有很多个} }其中 pointcut ⽅法为空⽅法它不需要有⽅法体此⽅法名就是起到⼀个“标识”的作⽤标识下⾯的通知⽅法具体指的是哪个切点因为切点可能有很多个 5.此时我们来测试一下通知方法注解 通知里就是要定义被切点拦截过来的方法具体要执行的业务比如用户登陆的权限验证就是具体要执行的业务在SpringAOP中可以在方法上加以下注解该方法就会变为通知方法在满足条件后就会被调用 1.前置通知使⽤ Before 通知方法在目标方法就是连接点执行之前调用 Before(pointcut())public void doBefore() {log.info(doBefore...);}此时我们在浏览器去搜索假装登陆操作 我们查看日志就可以发现在登陆操作之前执行了Before注解的方法 2.后置通知使⽤ After 该方法会在连接点也就是目标方法返回之后调用执行或者抛出异常之后也会调用 After(pointcut())public void doAfter() {log.info(doAfter...);}此时去浏览器搜索之后发现在登陆操作之后执行了After注解的方法 3.返回之后通知使⽤ AfterReturning 这个通知方法和After都实在目标方法返回之后才调用那么这两个的先后执行顺序是怎么样的呢 我们来测试一下 AfterReturning(pointcut())public void doAfterReturning() {log.info(doAfterReturning...);}在浏览器操作后查看日志发现doAfterRuturning注解的方法比After注解的方法先执行但是After还可以在抛出异常时调用而且一般这两个不会同时使用 4.抛异常后通知使⽤ AfterThrowing 该方法会在连接点抛出异常后调用 这个方法和After注解都拥有这个功能那么这两个方法执行的先后顺序如何呢 我们来测试一下 AfterThrowing(pointcut())public void doAfterThrowing() {log.info(doAfterThrowing...);}我们查看日志发现AfterThrowing同样是比After注解的方法先执行 5.环绕通知使⽤ Around使用最多 该方法包裹了连接点也就是目标方法在连接点通知之前和调用之后执行自定义的行为 注意环绕通知的返回结果需要自己定义 Around(pointcut())public Object doAround(ProceedingJoinPoint joinPoint) {// 传入当前的连接点// 定义返回结果Object oj null;log.info(环绕通知执行之前...);try {// 调用目标方法oj joinPoint.proceed();} catch (Throwable e) {throw new RuntimeException(e);}log.info(环绕通知执行之后...);return oj;}此时我们查看日志可以看见在连接点通知之前和调用之后都执行了环绕通知自定义的行为 6.实际应用 这样我们就可以在使用切点制定一组规则设置连接点拦截需要验证身份的方法使得他们在执行前都调用一下身份验证就像这样 Around(pointcut())public Object VerifyIdentity(ProceedingJoinPoint joinPoint) {Object oj null;log.info(身份验证的方法);try {// 执行目标方法oj joinPoint.proceed();} catch (Throwable e) {throw new RuntimeException(e);}return oj;} 我们在浏览器分别操作登录注册获取信息的场景 查看日志发现在每一次操作之前都调用了身份验证的方法 这样我们就实现了使用AOP进行统一的用户判断是不是方便了许多呢 本篇博客就到这里啦我们还是下篇博客见~~
http://www.yutouwan.com/news/209632/

相关文章:

  • 百度秒收网站青岛网站设计价格
  • 门户网站建设单位资质要求网站图片怎么做超链接
  • 公司网站建设的项目工作分解结构html简单网页代码下载
  • 随便建设网站犯法吗wordpress页面加载很慢
  • 移动建站价格工业设计专业就业方向
  • 局域网内网站建设的步骤过程wordpress 软件公司
  • 怎么把网站列入黑名单平台推广方式
  • 搭建网站详细步骤简述网站建设的一般流程
  • 为什么网站显示建设中长沙优化科技有限公司正规吗
  • iis7 asp网站 503官方推广平台
  • 东戴河网站建设网站建设网站营销网站托管一体化
  • 已经有备案的公司网站 还能不能加网站长春建设网站公司哪家好
  • 备案 个人网站雪亮工程建设网站界面
  • 贵州网站建设模板网站开发 哪些技术
  • 济南企业网站制wordpress首页home
  • 做酒的网站名字大全做插画的网站
  • 怎样做企业的网站首页免费绘画素材网站
  • 创意网站建设价格多少外贸推广服务公司
  • 运用photoshop设计网站首页女性购物平台排行榜
  • 做网站买完域名还要山东泰山新闻
  • 网站 集约化建设管理举措电商网站 技术
  • 网站seo文章网站备案信息如何注销吗
  • 网站前台显示数据库指定分类怎么做php网站建设kaicz
  • 中关村在线官方网站wordpress评论黑名单
  • 个人网站建设的收获硬件开发常用工具软件
  • 郑州网站建设 股权投资直通车关键词优化口诀
  • 阿里云怎么做淘宝客网站医院网站如何备案
  • 阿里云wordpress搭建网站网站开发需要的人员
  • 什么网站流量高建筑公司网站石家庄
  • 服务器可以吧网站做跳转吗朝阳网站建设推广