AOP和权限控制

AOP和权限控制,第1张

AOP和权限控制 AOP和权限控制 1.AOP控制

承接上一篇路线

在pom文件中导入依赖


    org.springframework.boot
    spring-boot-starter-aop

编写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:Users86157AppDataLocalTemp1643427864655.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层的对事务的控制

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5719678.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-18
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存