AOP和权限控制
1.AOP控制
承接上一篇路线
在pom文件中导入依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
编写AOP类
@Aspect
@Component
public class LogAspect {
//com/example/demo08aoptransactional/Controller
@Pointcut("execution(public * com.example.demo08aoptransactional.Controller.*.*(..))")
public void webLog(){}
/**
* 前置通知
*/
// @Before("webLog()")
public void beforeprintLog(){
System.out.println("Logger方法开始记录日志了...");
}
/**
* 后置通知
*/
// @AfterReturning("webLog()")
public void afterReturningPrintLog(){
System.out.println("Logger方法结束记录日志了...");
}
/**
* 异常通知
*/
// @AfterThrowing("webLog()")
public void afterThrowingPrintLog(){
System.out.println("Logger方法错误记录日志了...");
}
/**
* 最终通知
*/
// @After("webLog()")
public void afterPrintLog(){
System.out.println("Logger最终通知");
}
//环绕通知,环绕增强,相当于MethodInterceptor
@Around("webLog()")
public Object arround(ProceedingJoinPoint pjp) {
System.out.println("方法环绕start.....");
try {
Object o = pjp.proceed();
System.out.println("方法环绕proceed,结果是 :" + o);
return o;
} catch (Throwable e) {
e.printStackTrace();
return null;
}finally {
System.out.println("方法环绕结束,提交事务");
}
}
}
这样我们springboot的通知管理就ok了
权限管理
首先来看我们的sql语句
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GMWHgG15-1643428091554)(C:\Users\86157\AppData\Local\Temp\1643427864655.png)]
javabean类
@Data
public class Account implements Serializable {
private Integer id;
private String name;
private Double money;
}
Mapper类
@Repository
@Mapper//标注会对其进行扫描
public interface FirstDao {
@Select("select * from account where id = #{id}")
Account findById(Integer id);
@Update("update account set money = #{money} where id = #{id}")
void updatemoney(Account account);
}
service类
@Service
@Transactional//开启事务控制
public class FirstServiceimpl implements FirstService{
@Autowired
FirstDao firstDao;
@Override
public void transfer(Integer A, Integer B) {
Account a = firstDao.findById(A);
Account b = firstDao.findById(B);
a.setMoney(a.getMoney()-100);
b.setMoney(b.getMoney()+100);
System.out.println(a);
System.out.println(b);
firstDao.updatemoney(b);
int e = 10/0;
firstDao.updatemoney(a);
}
}
测试方法
@Test
void testService(){
firstService.transfer(2,3);
}
@Transactional//开启事务控制
rstDao.updatemoney(a);
}
}
测试方法
@Test
void testService(){
firstService.transfer(2,3);
}
@Transactional//开启事务控制
我们通过这一个注解就实现了在service层的对事务的控制
版权声明:本文为weixin_53227758原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。