spring 引导配置自动装配不能作为依赖项工作
spring boot Configuration autowired doesn't work as dependency
我有一个源项目,这里有一些代码
@Configuration
public class AnalyzeSyntaxServiceConfig {
@Bean
public AnalyzeSyntaxService analyzeSyntaxService() {
return new AnalyzeSyntaxService();
}
}
并像这样在源项目中使用它
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
效果很好
然后我把它打包成一个jar文件,并在pom.xml
中作为依赖添加到目标项目中,同样我尝试使用上面的这个服务
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
但是它是空的,为什么?
源代码和 consuming/dependent 代码库的包名称是否不同?
A Spring 引导应用程序将从放置 SpringBootApplication
的包和任何子包进行扫描。
如果您在同一个项目中使用它,并且您的配置 class 的结构是在同一个包或子包中,例如
com.myapp
或com.myapp.configs
将被扫描并拾取。
将它导入到不同的项目时,您需要通过 @ComponentScan
注释手动组件扫描配置,并为其提供一个包来扫描您的配置。
https://github.com/Flaw101/springbootmixin/tree/example/componentscanning
因为 JacksonConfig.class
在父(不同)包中,所以 ComponentScan 不起作用。应用程序 class 扫描 com.darrenforsythe.mixinabstractclass
中的所有内容及其子包。要使 Spring 引导扫描 JacksonConfig
,我们必须明确并将 @ComponentScan("com.darrenforsythe")
添加到应用程序。
如果您在 MixinasbtractclassApplication
中取消注释 @ComponentScan
,则测试会再次通过,因为它将再次加载 JacksonConfig
。
此外,我建议使用构造函数。注入这将避免 Autowired 依赖项为空,并在 ApplicationContext 的初始化时而不是在运行时通知您。
确保扫描了 class 可用的包。这是注释,将此注释放在 SpringBoot 应用程序 class.
中
@ComponentScan("com.abc.xyz")
此外,看看是否有机会实例化具有此自动装配的 class。如果 class 被实例化,那么自动装配的当然将为空。
我有一个源项目,这里有一些代码
@Configuration
public class AnalyzeSyntaxServiceConfig {
@Bean
public AnalyzeSyntaxService analyzeSyntaxService() {
return new AnalyzeSyntaxService();
}
}
并像这样在源项目中使用它
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
效果很好
然后我把它打包成一个jar文件,并在pom.xml
中作为依赖添加到目标项目中,同样我尝试使用上面的这个服务
@Autowired
private AnalyzeSyntaxService analyzeSyntaxService;
但是它是空的,为什么?
源代码和 consuming/dependent 代码库的包名称是否不同?
A Spring 引导应用程序将从放置 SpringBootApplication
的包和任何子包进行扫描。
如果您在同一个项目中使用它,并且您的配置 class 的结构是在同一个包或子包中,例如
com.myapp
或com.myapp.configs
将被扫描并拾取。
将它导入到不同的项目时,您需要通过 @ComponentScan
注释手动组件扫描配置,并为其提供一个包来扫描您的配置。
https://github.com/Flaw101/springbootmixin/tree/example/componentscanning
因为 JacksonConfig.class
在父(不同)包中,所以 ComponentScan 不起作用。应用程序 class 扫描 com.darrenforsythe.mixinabstractclass
中的所有内容及其子包。要使 Spring 引导扫描 JacksonConfig
,我们必须明确并将 @ComponentScan("com.darrenforsythe")
添加到应用程序。
如果您在 MixinasbtractclassApplication
中取消注释 @ComponentScan
,则测试会再次通过,因为它将再次加载 JacksonConfig
。
此外,我建议使用构造函数。注入这将避免 Autowired 依赖项为空,并在 ApplicationContext 的初始化时而不是在运行时通知您。
确保扫描了 class 可用的包。这是注释,将此注释放在 SpringBoot 应用程序 class.
中@ComponentScan("com.abc.xyz")
此外,看看是否有机会实例化具有此自动装配的 class。如果 class 被实例化,那么自动装配的当然将为空。