在使用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发现
答案 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类中自动装配实例的原因。