【问题标题】:Application don't start anymore after using aop使用 aop 后应用程序不再启动
【发布时间】:2018-10-07 03:50:08
【问题描述】:

我用的是spring boot2、spring 5

对于我的控制器,我有这些包

com.murphys.lcm.controller.mvc
com.murphys.lcm.controller.rest

我想为这两个包中的所有方法调用 getAllAdvice 方法

@Aspect
@Component
public class LogActionAspect {

    private final Logger logger = LoggerFactory.getLogger(this.getClass());

    @Before("execution(* com.murphys.lcm.controller.*(..))")
    public void getAllAdvice(JoinPoint joinPoint){
    }
}

应用程序不再启动我有很多错误

org.springframework.beans.factory.BeanCreationException: 错误 创建名称为“projectionDefinitionRegistrar”的bean 类路径资源 [org/springframework/data/rest/webmvc/config/RepositoryRestMvcConfiguration.class]: bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.cache.annotation.ProxyCachingConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“metaDataSourceAdvisor”的 bean 时出错:无法解析 设置时引用 bean 'methodSecurityMetadataSource' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:警告此类型不匹配 名称:com.murphys.lcm.controller [Xlint:invalidAbsoluteTypeName] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:496)

引起:org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.cache.annotation.ProxyCachingConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建名为“metaDataSourceAdvisor”的 bean 时出错:无法解析 设置时引用 bean 'methodSecurityMetadataSource' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:警告此类型不匹配 名称:com.murphys.lcm.controller [Xlint:invalidAbsoluteTypeName] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:496)

引起:org.springframework.beans.factory.BeanCreationException: 创建名为“metaDataSourceAdvisor”的 bean 时出错:无法解析 设置时引用 bean 'methodSecurityMetadataSource' 构造函数参数;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 用名字创建bean 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:警告此类型不匹配 名称:com.murphys.lcm.controller [Xlint:invalidAbsoluteTypeName] at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:378) 引起:org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.security.config.annotation.method.configuration.GlobalMethodSecurityConfiguration': bean 实例化之前的 BeanPostProcessor 失败;嵌套的 例外是 org.springframework.beans.factory.BeanCreationException: 创建具有名称的 bean 时出错 'org.springframework.transaction.annotation.ProxyTransactionManagementConfiguration': bean初始化失败;嵌套异常是 java.lang.IllegalArgumentException:警告此类型不匹配 名称:com.murphys.lcm.controller [Xlint:invalidAbsoluteTypeName] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:496)

【问题讨论】:

    标签: spring spring-boot spring-aop


    【解决方案1】:

    试试这个

    @Before("execution(* com.murphys.lcm.controller.*.*Controller*.*(..))")
    

    这将获得所有控制器(假设您的控制器名称中有 Controller)

    刚刚测试过并且可以工作

    【讨论】:

    • 我会改进它,使其更通用,同时更易于阅读,真正找到所有子包中的所有类和方法,而不仅仅是某个包级别。切入点应该是execution(* com.murphys.lcm.controller..*(..))。顺便说一句,罗伯特,我认为您真的应该阅读 AspectJ 和/或 Spring AOP 教程,而不是在这里遇到每个语法问题问一个问题。
    猜你喜欢
    • 2021-10-30
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多