当前位置: 首页 > 知识库问答 >
问题:

Spring-Autowire在向重写方法添加方面支持注释时失败

符风畔
2023-03-14
@Service
public class AuthService implements UserDetailsService {
    // Autowires ..

    @Override
    //@Logged(successMessage = "User %s logged in")
    public UserDetails loadUserByUsername(String username) { .. }
}

它被autowired到WebSecurityConfigurerAdapter的扩展中,并用于配置身份验证:

// Annotations ...
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Autowired
    private AuthService authService;

    @Override
    public void configure(AuthenticationManagerBuilder auth) throws Exception { 
        BCryptPasswordEncoder encoder = new BCryptPasswordEncoder();
        auth.userDetailsService(authService).passwordEncoder(encoder);
    }
    // Other security config stuff ...
}

最后,我创建了一个名为@logged的自定义注释,它由一个方面获取,该方面将around建议应用于带注释的方法,并执行一些日志逻辑。假设您只传递一个参数给它,它将记录成功的返回。

对重写的AuthService.LoadUserByUserName方法应用@logged注释会导致应用程序在启动时崩溃,并显示关于无法将AuthService autowire放入SecurityConfig的消息。如果我不把注释放在那个被覆盖的方法上,一切都可以完美无缺地工作--身份验证工作(与autowiring一起完成),日志注释工作在系统的其他部分。

Spring4,带靴子,码头9

堆栈跟踪(部分):

2014-09-22 12:41:05 WARN AbstractLifeCycle-失败的org.springframework.boot.context.embeddedd.jetty.ServletContextInitializerConfiguration$InitializerListener@8bb473:org.springframework.beans.factory.beans.creationException:创建名为'org.springframework.security.config.annotation.web.comfiguration.WebSecurityConfiguration‘的bean时出错:注入html" target="_blank">嵌套的异常是org.springframework.beans.factory.beanCreationException:不能autowire方法:public void org.springframework.security.config.annotation.web.configuration.websecurityconfiguration.setfilterchainproxysecurityConfigurer(org.springframework.security.config.annotation.objectPostProcessor,java.util.list)抛出java.lang.exception;嵌套异常是org.springframework.beans.factory.BeanExpressionException:表达式解析失败;嵌套异常是org.springframework.beans.factory.beanCreationException:创建名为“security config”的bean时出错:注入autowired依赖项失败;嵌套的异常是org.springframework.beans.factory.beanCreationException:不能autowire字段:private com.bluepixelflag.services.authservice com.bluepixelflag.config.securityconfig.authservice;嵌套异常是java.lang.IllegalArgumentException:无法将com.bluepixelflag.services.authService字段com.bluepixelflag.config.securityconfig.authService设置为com.sun.proxy.$proxy90

共有1个答案

卢志业
2023-03-14

Spring使用代理向AuthService添加方面。如果没有注释,它只会使用一个简单的类。

改变

私有AuthService AuthService;

 类似资料:
  • 问题内容: 有没有一种方法可以修改.class文件,以便向某些方法添加Java注释?基本上,我想遍历jar文件中每个类文件的方法并注释某些方法。请注意,使用jar文件时,这不是在运行时。相反,完成后,我想使用注释修改类文件。 我确实可以访问源代码,因此,如果有一个自动的源代码修改器,那也可以工作… 我假设我需要Javassist或ASM之类的工具。如果是这样,我应该使用哪一个,我将如何处理? 问题

  • 我在许多示例中看到在Spring中对方法使用@Autowire。例如在配置文件中: 我猜我上面例子中的某个Bean是由Spring注入到方法中的,但是这个方法是什么时候调用的?以及如何调用它?

  • 问题内容: 我到处环顾了很多,还没有找到将现有IntelliJ项目转换为Gradle的最佳解决方案。我在团队环境中工作,我们目前共享.ipr文件,因为我们要跟踪一些构建配置。最终,我们将摆脱那些偏爱Gradle的人,但是在Gradle转换完成之前,我不能搞砸太多。 同样,我们的Java源文件位于src目录的根目录中,而不是标准的src / main / java。 有什么方法可以将Gradle添加

  • 本文向大家介绍vue.js 添加 fastclick的支持方法,包括了vue.js 添加 fastclick的支持方法的使用技巧和注意事项,需要的朋友参考一下 fastclick:处理移动端click事件300毫秒延迟 1、兼容性 iOS 3及更高版本的移动Safari iOS 5及更高版本的Chrome Android上的Chrome(ICS) Opera Mobile 11.5及以上版本 An

  • 另外,请举例说明何时使用annotaion。 提前感谢。

  • 问题内容: 我一直在寻找“如何在运行时向方法添加注释”的答案,发现了一个名为Byte Buddy的出色工具,可以使用它,但仍然无法按需使用。我确定它必须能够从这个问题做到这一点Byte Buddy可以在运行时创建字段和方法注释吗? 上这堂课: 和此代码: 向 类 添加注释很容易。但是对于 方法而言 ,似乎不更改方法实现是不可能的。 我敢肯定,我只是做得不好,但是不幸的是,当方法 没有代码更改 而只