谈谈对Spring的AOP机制

谈到Spring,必然是它的核心两大功能,IOC和AOP.
AOP:面向切面,其原理就是通过动态代理,代理类做一系列的切面处理。
动态代理有两种方式,JDK原生的和CG。(boot2之后用的就是CG)
这里注意,JDK原生的的本质是其通过接口的方式生成的代理类,而CG是通过子类继承父类的方式生成的代理类,如果是final不可继承的肯定是生成不了代理类。
AOP的运用场景:很多小白还不了解在什么时候用过AOP。
首先,事务的运用就是AOP,翻开Dao层的注解是不是有个@Transactional,你把@Transactional这个类加上final,你看事务还能生效不。
其次就是权限这块,举一个简单的例子。一个用户名和密码进来,看看他有没有权限做这件事
思想:自定义一个注解,controller所有被这个注解标注过的方法都进行权限处理。
①:自定义一个注解:(也可以不用自定义注解,在切面类里直接切要权限认证的方法)

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
public @interface AnthCheck {

}

②:controller啥也不用写

@RestController
public class PersonControllerImpl implements PersonController {

    @AnthCheck
    @Override
    public String checkUp(UserEntity userEntity) {
     return null;
    }
}


③:编写切面类:
 

@Aspect
@Component
public class aaaAOP {


    //拦截所有被注解AuthCheck标注的方法
    @Pointcut("@annotation(com.syan.cloudbiz2.aop.AnthCheck)")
    private void pointAll(){}

     @Before(value="pointAll()&&args(userEntity)")
    public void beforemethed(JoinPoint joinPoint,UserEntity userEntity){


/*这部分写具体查数据库或者查缓存,看是否有权限*/
}
}

这里只是演示一下可能运用的场景,实际开发过程当中,肯定有许多逻辑可以写。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值