@Aspect
切面类 注解,用与标识该类是切面类
指定切入点规则
within表示对那个类进行增强,会对该类所有方法进行增强
此时连接点变成了切入点(指定了规则)
@Pointcut("within(cn.tdeu.pojo.A)")
public void rule(){
@Component
@Aspect
//切面类
public class MyAspect {
@Pointcut("within(com.jt.pojo.BasePojo)")
public void rules(){}
@Around("rules()")
public void around(){System.out.println("环绕通知");}
@Before("rules()")
public void before(){System.out.println("前置通知");}
@AfterReturning("rules()")
public void afterReturning(){System.out.println("后置通知");}
@AfterThrowing("rules()")
public void afterThrowing(){System.out.println("异常处理");}
@After("rules()")
public void after(){System.out.println("最终通知");}
}
@Slf4j
lombok提供的注解,帮助程序员生成日志记录
@XSlf4j
@EnableAspectJAutoProxy(proxyTargetClass = true)强制使用CGLIB
}
前置通知
@Before("rule()")
public void before(){
System.out.println("前置通知");
}
@AfterReturning(value = "rule3()" , returning = "rs")
public void afterRun(String rs){
System.out.println("后置通知被执行了");
System.out.println("目标方法的返回值"+rs);
}
@Around(value = "rule2()")
@After("rule2()")最终通知
public Object afterRun(ProceedingJoinPoint pjp) throws Throwable {
System.out.println("环绕通知被执行了");
@AfterThrowing(value = "rule4()",throwing = "e")
public void afterRun(Exception e) throws Throwable {
抛异常时记录日志 创建日志对象 org.slf4j.类的对象
Logger log = LoggerFactory.getLogger(Second.class);
级别由低到高
log.trace("===trace级别追踪");
log.debug("===debug级别调试");
spring默认中日志info级别及以上
log.info("===info级别通知");
log.warn("===warn级别警告");
log.error("===error级别错误");
String message = e.getMessage();
System.out.println("AfterThrowing通知被执行了")
@CrossOrigin(origins = "*", maxAge = 3600)是用来处理跨域请求的注解
@Transactional(rollbackFor = Exception.class )
// spring事务控制 @Transactional 通过环绕通知控制 around
// around 特征 业务执行前(开启事务控制),执行目标方法 ,业务执行后(成功提交事务 失败回滚事务)
/**
* rollbackFor = Exception.class, 遇到异常回滚数据
* noRollbackFor = Exception.class 遇到异常不回滚数据
* spring 默认事务策略
* 1.如果控制的方法出现了运行时异常,则事务自动的回滚
* 2.如果控制的方法出现了编译时异常, 则事务不会自动回滚,
* spring任务程序既然出现提示需要异常处理,则默认由程序员自己处理,spring不控制
*/
public void delete(Integer id) {
userMapper.deleteById(id);
}
/**
* 全局异常处理 采用环绕通知AOP around
*
*/
@RestControllerAdvice
//异常处理后返回json串
//捕获controller 层的异常,其他层向上抛
public class MyException extends Exception {
/**
* 业务:后端报错,提示用户,返回SysResult对象
*/
@ExceptionHandler(RuntimeException.class)
// 当遇到某种异常时全局异常处理机制生效!(遇到运行时异常生效)
public Object exception(Exception e){
e.printStackTrace();
// e.getMessage();