java自定义注解在service层不生效原因

 

在做对数据加redis缓存时,我这面采用了Spring-Aop的方式通过切面将数据存放在redis中,但是业务场景是,当前端调用了controller层的接口时,会走一些签名校验,如果校验过了才会真正调用service层去取数据,所以我自己定义的注解加载controller层很显然不合适,最理想的状况就是在service层上面加注解。但是实际操作时发现根本不起作用,不走我自己定义的切面,只有在controller层加注解时才起作用

在网上找了很多很多资料,很少有我这种状况,偶然的机会看到一个人回复的问题和我的状况一样,废话不多说直接贴图

赶紧去找自己的spring.xml配置,发现果然时没有扫service层,加上后起作用了。

 

延伸一下,这是偶然看到的一个问题

interface A {
    int method1(..);
    int method2(..);
    ... ...
}

class AImpl implements A {
    @Override
    @CacheMM(second=600)      //这里的@CacheMM就是我实现的自定义缓存注解
    public int method1(..
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spring Boot允许我们使用自定义AOP来定制业务逻辑。AOP(面向切面编程)是一种编程范式,可以在不改变原有代码的情况下,对现有代码进行增强。 下面是自定义AOP的步骤: 1. 创建一个切面类,使用@Aspect注解标注该类。该类中需要定义一个或多个切点和通知方法。 ```java @Aspect @Component public class MyAspect { @Pointcut("execution(* com.example.demo.service.*.*(..))") public void pointcut() { } @Around("pointcut()") public Object around(ProceedingJoinPoint pjp) throws Throwable { // 前置通知 System.out.println("Before method execute..."); // 执行目标方法 Object result = pjp.proceed(); // 后置通知 System.out.println("After method execute..."); return result; } } ``` 上述代码中,@Pointcut注解定义了一个切点,切点表达式指定了需要增强的方法,这里指定为com.example.demo.service包下的所有方法。@Around注解定义了一个环绕通知方法,该方法在目标方法执行前后分别执行前置通知和后置通知。 2. 在应用程序入口类上添加@EnableAspectJAutoProxy注解,启用Spring的AOP功能。 ```java @SpringBootApplication @EnableAspectJAutoProxy public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } } ``` 3. 在需要增强的方法上添加自定义注解,并在切面类中定义一个针对该注解的切点。 ```java @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { } ``` ```java @Aspect @Component public class MyAspect { @Pointcut("@annotation(com.example.demo.annotation.MyAnnotation)") public void pointcut() { } @Around("pointcut()") public Object around(ProceedingJoinPoint pjp) throws Throwable { // 前置通知 System.out.println("Before method execute..."); // 执行目标方法 Object result = pjp.proceed(); // 后置通知 System.out.println("After method execute..."); return result; } } ``` 上述代码中,@MyAnnotation注解用于标注需要增强的方法,@Pointcut注解定义一个针对@MyAnnotation注解的切点,@Around注解定义一个环绕通知方法,该方法在目标方法执行前后分别执行前置通知和后置通知。 4. 在需要增强的方法上添加@MyAnnotation注解。 ```java @Service public class UserServiceImpl implements UserService { @Override @MyAnnotation public void addUser(User user) { System.out.println("Add user: " + user.getName()); } } ``` 上述代码中,addUser方法上添加了@MyAnnotation注解,表示该方法需要增强。 5. 运行应用程序,观察控制台输出。 ```java Before method execute... Add user: Alice After method execute... ``` 上述输出结果表明,自定义AOP已经生效,增强逻辑被成功执行。 总结:Spring Boot允许我们使用自定义AOP来定制业务逻辑,可以通过定义切面类、切点、通知方法等方式来实现增强逻辑。在实际应用中,我们可以根据具体需求来制定相应的AOP策略,从而提高应用程序的可扩展性和可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值