在springboot中,autowired无效,总是为空?

时间:2018-03-01 06:14:21

标签: spring spring-mvc spring-boot spring-security autowired

在使用springsecurity编写自定义身份验证的spring-boot应用程序中。 CustomUserService是一个接口,它有一个实现类和一个从数据库中获取数据的存储库。

@Component
    public class CustomAuthenticationProvider implements AuthenticationProvider{
    @Autowired
    private CustomUserService userService;

    @override
    someMethod(){//method of CustomUserService interface.
    userService.display();//here  "userService"  is always  null coming
    }
    }

保持@service on implementation&使用@ComponentScan进行basepackages发现

4 个答案:

答案 0 :(得分:0)

只要接口只有一个实现,并且使用Spring的组件扫描启用@Component注释实现,那么Spring框架就可以找到(接口,实现)对。

在这种情况下,如果它为null,则实现类未使用@Component注释或组件扫描不起作用

答案 1 :(得分:0)

检查您是否注释CustomUserService implementation@Component@Service以及组件扫描是否可以发现此服务。

答案 2 :(得分:0)

在Spring启动应用程序中,您不必显式启用组件扫描。所有带注释的类将自动注册为bean,这些bean存在于spring-boot应用程序类(带有@SpringBootApplication注释)的包中。

因此,如果您在com.abc包中存在Application类,则将扫描com.abc的所有子包以查找spring bean。请参考下面的树:

+--- src
|   +--- main
|   |   +--- java
|   |   |   +--- com
|   |   |   |   +--- application
|   |   |   |   |   +--- Application.java
|   |   |   |   |   +--- beans
|   |   |   |   |   |   +--- ASpringBean.java
|   |   |   |   |   |   +--- AnotherSpringBean.java

在您的情况下,可能无法发现bean,因为它们位于应用程序类包之外。

答案 3 :(得分:0)

我的不好!.......我在代码中的某些地方使用了新的Keyword来创建CustomAuthenticationProvider的实例,这就是为什么spring不在CustomAuthenticationProvider类中自动装配实例的原因。