在春季启动autowired不工作,总是null?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在春季启动autowired不工作,总是null?相关的知识,希望对你有一定的参考价值。
在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的组件扫描启用@Component注释实现,那么Spring框架就可以找到(接口,实现)对。
在这种情况下,如果它为null,则实现类不会使用@Component注释,或者组件扫描不起作用
检查是否注释CustomUserService implementation
类@Component
或@Service
以及组件扫描是否可以发现此服务。
在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没有被发现,因为它们在应用程序类包之外。
我的不好!.......我在代码中的某些地方使用了新的Keyword来创建CustomAuthenticationProvider的实例,这就是为什么spring不在CustomAuthenticationProvider类中自动装配实例的原因。
以上是关于在春季启动autowired不工作,总是null?的主要内容,如果未能解决你的问题,请参考以下文章