我不能@Autowire 存在于依赖库 Jar 中的 Bean 吗?
Can't I @Autowire a Bean which is present in a dependent Library Jar?
我有一个 Spring 引导应用程序 (Y),它依赖于一组打包为 x.jar 的库文件,并在应用程序 Y 的 pom.xml 中作为依赖项提到。
x.jar 有一个名为 (User.java) 的 bean
应用程序 Y 有一个名为 (Department.java)
的 java class
当我尝试在 Department.java 中自动装配 User.java 的实例时,出现以下错误
我不能@Autowire 存在于依赖库 Jar 中的 Bean 吗?
Could not autowire field: private com.User user; nested exception is
org.springframework.beans.factory.NoSuchBeanDefinitionException: No
qualifying bean of type [com.User] found for dependency: expected at
least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}
No qualifying bean of type [com.User] found for dependency: expected
at least 1 bean which qualifies as autowire candidate for this
dependency. Dependency annotations:
{@org.springframework.beans.factory.annotation.Autowired(required=true)}**
这是 Spring 引导应用程序中的代码 'Y'
package myapp;
@Component
public class Department {
@Autowired
private com.User user;
//has getter setters for user
}
这是库中 User.java 的代码 x.jar
package com;
@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {
private String name;
//has getter setters for name
}
这是应用程序 Y
的 pom.xml 中 x.jar 的依赖项
<groupId>com.Lib</groupId>
<artifactId>x</artifactId>
<version>001</version>
</dependency>
这是应用程序中的主要 class 'Y'
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
部门和用户在不同的包下。
解决方案:我应用了以下 2 个步骤,现在自动装配工作正常。
第1步:在jar文件class中添加了以下内容
package com
@Configuration
@ComponentScan
public class XConfiguration {
}
第 2 步:在 Y 项目的主 class
中导入此配置 class
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
@Import(XConfiguration.class)
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
您需要添加主 class 和用户 class 的软件包名称才能 100% 确定,但更有可能的是,用户 class 不在与您的主 class 相同的包(或子包)。这意味着组件扫描不会拾取它。
你可以像这样强制spring查看其他包:
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})
我有一个 Spring 引导应用程序 (Y),它依赖于一组打包为 x.jar 的库文件,并在应用程序 Y 的 pom.xml 中作为依赖项提到。
x.jar 有一个名为 (User.java) 的 bean 应用程序 Y 有一个名为 (Department.java)
的 java class当我尝试在 Department.java 中自动装配 User.java 的实例时,出现以下错误
我不能@Autowire 存在于依赖库 Jar 中的 Bean 吗?
Could not autowire field: private com.User user; nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.User] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
No qualifying bean of type [com.User] found for dependency: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}**
这是 Spring 引导应用程序中的代码 'Y'
package myapp;
@Component
public class Department {
@Autowired
private com.User user;
//has getter setters for user
}
这是库中 User.java 的代码 x.jar
package com;
@Component
@ConfigurationProperties(prefix = "test.userproperties")
public class User {
private String name;
//has getter setters for name
}
这是应用程序 Y
的 pom.xml 中 x.jar 的依赖项 <groupId>com.Lib</groupId>
<artifactId>x</artifactId>
<version>001</version>
</dependency>
这是应用程序中的主要 class 'Y'
@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
部门和用户在不同的包下。
解决方案:我应用了以下 2 个步骤,现在自动装配工作正常。
第1步:在jar文件class中添加了以下内容
package com
@Configuration
@ComponentScan
public class XConfiguration {
}
第 2 步:在 Y 项目的主 class
中导入此配置 class@Configuration
@EnableAutoConfiguration
@ComponentScan
@EnableZuulProxy
@EnableGemfireSession(maxInactiveIntervalInSeconds=60)
@EnableCircuitBreaker
@EnableHystrixDashboard
@EnableDiscoveryClient
@Import(XConfiguration.class)
public class ZuulApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
}
}
您需要添加主 class 和用户 class 的软件包名称才能 100% 确定,但更有可能的是,用户 class 不在与您的主 class 相同的包(或子包)。这意味着组件扫描不会拾取它。
你可以像这样强制spring查看其他包:
@ComponentScan(basePackages = {"org.example.main", "package.of.user.class"})