在春季启动autowired不工作,总是null?

问题描述 投票:-1回答:4

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

@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实现并使用@ComponentScan进行basepackages发现

spring spring-mvc spring-boot spring-security autowired
4个回答
0
投票

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

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


0
投票

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


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没有被发现,因为它们在应用程序类包之外。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.