Spring AOP,通知使用,spring事件管理,spring_web搭建

打印 上一主题 下一主题

主题 539|帖子 539|积分 1617

spring AOP

AOP概述

AOP面向切面编程是对面向对象编程的延续(AOP (Aspect Orient Programming),直译过来就是 面向切面编程,AOP 是一种编程头脑,是面向对象编程(OOP)的一种补充。)
面向切面编程头脑是将步调中非业务代码(提交事件,打印日志,权限验证,统一异常处理)提取分离出来,通过署理对象帮助我们调用这些提取出来的非业务代码,在业务代码中不用显示调用非业务代码,最终做到了也业务代码与非业务代码的分离,降低了耦合度。
面向切面编程,是实现在不修改源代码的情况下给步调动态统一添加额外功能的一种技术,AOP 接纳横向抽取机制(动态署理),取代了传统纵向继承机制的重复性代码,其应用主要体现在事件处理、日志管理、权限控制、异常处理等方面。简单的说,AOP 的作用就是保证开发者在不修改源代码的条件下,为系统中的业务组件添加某种通勤奋能。
原理:动态署理模式
AOP编程头脑是java中的,不是spring专有的是spring使用了这一编程头脑
实现

首先导入jar包


AspectJ 是一个基于 Java 语言的 AOP 框架,它提供了强盛的 AOP 功能,且其实
现方式更为简捷,使用更为方便, 而且还支持注解式开发。所以,Spring 又
将 AspectJ 的对于 AOP 的实现也引入到了自己的框架中。
开启自动署理,在spring文件内里开启自动署理

创建自动署理的类,参加注解标签,

@before在运行毗连点方法之前实行,传入参数为在com.ffyc.spring.dao.adminDao类下面的全部的方法,都是切入点,(..)内里传入的参数不定,最前面的*表示方法返回值任意。
@after是在运行后实行,无论前面出现没有异常

运行结果

@AfterThrowing 运行时出现错误实行,通过throwing可以得到异常出现的原因
@AfterReturning 运行时出现异常不进行实行

@around环绕通知

运行结果

spring事件管理

概述

事件管理本质上是数据库提供的一种管理机制(数据库事件管理就是对一次数据库操作过程中实行的多条语句进行管理,保证一次对数据库操作过程中多条 sql 要么都实行乐成,要么都不实行,从而确保数据一致性.)
事件的作用就是为了保证用户的每一个操作都是可靠的,事件中的每一步操作都必须乐成实行,只要有发生异常就回退到事件开始未进行操作的状态,这些操作要么都完成,要么都取消,从而保证数据满意一致性的要求
Spring事件管理是spring框架对事件提交这一功能进行封装,步调员在业务开发中不必要显示提交事件。
Spring 中的事件管理分为两种形式:


  • 编程式事件
必要步调员自己在代码内里控制事件触发和回滚

  • 说明式事件
说明式事件底层使用了AOP头脑,可以为方法添加事件功能,他的控制是方法级别的
Spring 框架,提供事物管理实现类是 DataSourceTransactionManager.
实现
1.配置事件管理


必要提交事件的方法上面加上注解@Transactional

没有出现异常的话事件会正常提交,出现异常的话事件会发生回滚,要么全发生,要么都不发生。必要注意的事变是如果此方法加上了@AfterThrowing 运行时出现错误实行,通过throwing可以得到异常出现的原因 大概 加上了@around环绕通知 会对@Transactional事件提交造成影响,他们会对异常进行捕获,@Transactional就不知道方法内里实行错误了,还会提交织误的事件。
@Transactiona可以添加在方法上面,也可以添加到类上面,添加到类上面,此类内里全部的方法都会被提交事件所管理。
一样平常情况下,@Transactiona都添加在service层
说明事件失效场景


  • @Transactiona用在了非public方法上面
同一包下面,默认的格式可以调用

添加@Transactiona注解,要么全部提交要么全不提交,运行结果确是提交了一条,出现异常未发生回滚,没有触发事件。


  • 方法中异常被捕获了,@Transactiona认为方法上面没有异常

发生异常被捕获后@Transactiona认为方法上面没有异常其实已经出错了,事件提交也只是提交了一条数据,没有全部提交

2.方法中出现编译器异常,还是会提交事件
 @Transactional(rollbackFor = Exception.class)这样就可以,出现编译器异常事件就不会提交了。

  • 编译器异常也会影响@Transactiona提交事件


  • 数据库引擎不支持提交事件  mysql中只有innodb支持提交事件
spring_web搭建

Ssm框架
早期ssm=spring+strtuts2+mybatis    ssh
现在 ssm=spring+springweb+mybatis
搭建

1.导包
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.2.RELEASE</version>
</dependency>
2.在web.xml配置spring核心哀求分发器

在spring.xml中开启web层注解
<!--开启web层注解-->
   
<mvc:annotation-driven></mvc:annotation-driven>
3.部署tomcat


写一个测试


Springweb运行流程

Springweb组件

前端控制器:DispatcherServlet(不必要步调员开发),由框架提供,在web.xml 中配置。
作用:统一处理哀求和响应,整个流程控制的中心,由它调用别的组件处理用户的哀求.
处理器映射器:HandlerMapping(不必要步调员开发),由框架提供。
作用:根据哀求的 url 查找 Handler(处理器/Controller)
处理器适配器:HandlerAdapter(不必要步调员开发),由框架提供。
作用:按照特定规则(HandlerAdapter 要求的规则)去实行 Handler。
处理器:Handler(也称之为 Controller,必要工程师开发)。
注意:编写 Handler 时按照 HandlerAdapter 的要求去做,这样适配器才可
以去准确实行 Handler。
作用:接受用户哀求信息,调用业务方法处理哀求,也称之为后端控制器。









免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

正序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

石小疯

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表