SpringBoot调用公共模块的自定义注解失效的解决

目录
  • 调用公共模块的自定义注解失效
    • 项目结构如下
    • 解决方法
  • SpringBoot注解不生效,踩坑
    • 解决方法

调用公共模块的自定义注解失效

项目结构如下

我在 bi-common 公共模块里定义了一个自定义注解,实现AOP记录日志,bi-batch 项目已引用了 bi-common ,当在 bi-batch 使用注解的时候,没有报错,但是切面却失效。

自定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface JobLog {
}

切面实现:

/**
 * 执行任务时记录日志
 */
@Aspect
@Component
@Order(1)
@Slf4j
public class JobLogAspect {
    @Pointcut("@annotation(aoshu.bi.platform.common.annotation.JobLog)")
    public void pointcut() {
    }
    @Before("pointcut()")
    public void  logStart(JoinPoint joinPoint) {
        log.info("开始执行" + joinPoint.getSignature().getName() + "任务,参数为:" + Arrays.toString(joinPoint.getArgs()));
    }
    @After("pointcut()")
    public void logEnd(JoinPoint joinPoint){
        log.info(""+joinPoint.getSignature().getName()+"方法运行后。。。@After");
    }
}

注解使用:

	/**
	 *  这里使用了自定义注解,却失效,但是没报错
	 */
    @JobLog
    public Job createEsJob(String jobName) {
        return jobBuilderFactory.get(jobName)
                .start(esLogJobStep.step())
                .build();
    }

解决方法

原因:

其他工程没有扫描公共模块的包,没有扫描到注解的位置。

解决方法1:

在启动类加上公共模块的包路径,注意别忘记把原项目的包路径也加上

@SpringBootApplication(scanBasePackages = {
        "aoshu.bi.platform.batch",
        "aoshu.bi.platform.common"
})

解决方法2:

在配置类里导入该切面实现

@Import({
        aoshu.bi.platform.common.aspect.JobLogAspect.class
})
@Configuration
public class BatchConfigure {
}

SpringBoot注解不生效,踩坑

子模块的项目,注解都不生效,包括@RestController @EnableScheduling @Scheduled等;

解决方法

在子项目右键,clean install,会发现报错了,解决完问题以后就可以了。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持我们。

(0)

相关推荐

  • 解决SpringBoot中使用@Async注解失效的问题

    错误示例,同一个类中使用异步方法: package com.xqnode.learning.controller; import com.fasterxml.jackson.core.JsonProcessingException; import org.springframework.scheduling.annotation.Async; import org.springframework.web.bind.annotation.GetMapping; import org.springf

  • Spring @Value注解失效问题解决方案

    项目使用的是SSM体系,spring的配置如下,配置没问题,因为我发现其他文件中的@Value可以使用,只有一处@Value失效了. spring-servlet.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.or

  • java SpringBoot注解@Async不生效的解决方法

    目录 问题描述: 解决方案: 总结: SpringBoot 注解@Async不生效的解决方法 问题描述: 这里虽然加了@EnableAsync和@Async,但是异步请求依然没有生效 解决方案: 方法一: 同一个类中调用需要先获取代理对象,也就是手动获取对象 @Service @EnableAsync public class DemoService { public void add(){ DemoService bean = SpringUtil.getBean(DemoService.cl

  • 解决spring boot启动扫描不到自定义注解的问题

    对于自定义注解这里就不唠叨了,百度一大堆,这里有我一个自定义注解 @Retention(RetentionPolicy.RUNTIME) @Target({ ElementType.METHOD }) public @interface MsgEvent { RetailOrderEvent msgEvent(); } 注解实现类 @Component public class MsgEventProcessor implements BeanPostProcessor { /** * 事件消息

  • SpringBoot调用公共模块的自定义注解失效的解决

    目录 调用公共模块的自定义注解失效 项目结构如下 解决方法 SpringBoot注解不生效,踩坑 解决方法 调用公共模块的自定义注解失效 项目结构如下 我在 bi-common 公共模块里定义了一个自定义注解,实现AOP记录日志,bi-batch 项目已引用了 bi-common ,当在 bi-batch 使用注解的时候,没有报错,但是切面却失效. 自定义注解: @Target(ElementType.METHOD) @Retention(RetentionPolicy.RUNTIME) pub

  • Java设计模式之代理模式与@Async异步注解失效的解决

    目录 JDK动态代理实现自定义异步注解(@Async) SpringAOP实现自定义异步注解 Spring的异步注解@Async失效分析 自定义注解实现方式 JDK动态代理实现自定义异步注解(@Async) 实现思路: 首先自定义一个注解,命名为:ExtAsync 实现一个接口,这个接口的实现类就是被代理类 实现jdk的InvocationHandler接口,根据反射获取目标方法的信息,判断是否有异步注解,如果有则另起一个线程异步执行去. 1.异步注解 @Target({ElementType.

  • javax NotBlank和Email注解失效的解决

    javax NotBlank和Email注解失效 使用javax的NotBlan和Email注解, 结果报类似错误 no validator could be found for constraint 'javax.validation.constraints.notblank' 原来是由于javax只提供了注解的定义,未提供对应的处理器,一般使用hibernate提供的注解处理器. 但是hibernate未提供NotBlank和Email注解的处理器(但是hibernate自己定义的NotBl

  • 关于Spring注解@Async引发其他注解失效的解决

    概述 在前面一篇文章中,介绍,在一个Bean中注入自己,如果有@Async和@Transaction,如果使用@Autowire注入自身,会报循环依赖,如果使用BeanFactoryAware注入自己,会使得@Transaction失效. 例如: @Service public class MyService implements BeanFactoryAware{ private MyService self; //事务注解无效 @Transactional public void notWo

  • Spring AOP注解失效的坑及JDK动态代理

    @Transactional @Async等注解不起作用 之前很多人在使用Spring中的@Transactional, @Async等注解时,都多少碰到过注解不起作用的情况. 为什么会出现这些情况呢?因为这些注解的功能实际上都是Spring AOP实现的,而其实现原理是通过代理实现的. JDK动态代理 以一个简单的例子理解一下JDK动态代理的基本原理: //目标类接口 public interface JDKProxyTestService { void run(); } //目标类 publ

  • SpringBoot使用自定义注解实现权限拦截的示例

    本文介绍了SpringBoot使用自定义注解实现权限拦截的示例,分享给大家,具体如下: HandlerInterceptor(处理器拦截器) 常见使用场景 日志记录: 记录请求信息的日志, 以便进行信息监控, 信息统计, 计算PV(page View)等 性能监控: 权限检查: 通用行为: 使用自定义注解实现权限拦截 首先HandlerInterceptor了解 在HandlerInterceptor中有三个方法: public interface HandlerInterceptor { //

  • SpringBoot 拦截器和自定义注解判断请求是否合法

    应用场景举例: 当不同身份的用户请求一个接口时,用来校验用户某些身份,这样可以对单个字段数据进行精确权限控制,具体看代码注释 自定义注解 /** * 对比请求的用户身份是否符合 * @author liuyalong * @date 2020/9/25 16:03 */ @Target(ElementType.PARAMETER) @Retention(RetentionPolicy.RUNTIME) public @interface CompareUser { /** * The name

  • SpringBoot自定义/error路径失效的解决

    目录 SpringBoot自定义/error路径失效 背景 配置信息 解决思路 SpringBoot的/error的自定义处理 它的具体定义如下 他有三个方法 SpringBoot自定义/error路径失效 背景 最近使用SpringBoot做controller统一异常处理的时候,配置好映射路径(/error),使用SpringBoot自带的异常通知注解@ControllerAdvice配置好异常处理类,按理说在Controller发生异常的时候重定向到自定义错误页面(这里是重定向到Sprin

  • java SpringBoot自定义注解,及自定义解析器实现对象自动注入操作

    # java-SpringBoot自定义参数解析器实现对象自动注入 解析器逻辑流程图表 后台解析注解的解析器 首先,我在java后台编写了一个解析器,代码如下 import com.ruoyi.framework.interceptor.annotation.LoginUser; import com.ruoyi.project.WebMoudle.WebUser.domain.WebUser; import com.ruoyi.project.WebMoudle.WebUser.service

随机推荐