我正在建立一个供多个客户端使用的库。它是基于Spring的库。我正在通过在另一个Web应用程序中添加作为依赖项来测试该库。
package com.mypackage;
@Configuration
@PropertySource("classpath:abc.properties")
@ComponentScan(basePackages = "com.abc.xyz")
public class AppConfig {
@Value("${myprod.password}")
private String password;
@Value("${{myprod.timeout}")
private String timeout;
@Bean
public BeanA beanA() {
BeanA beanA = new BeanA();
....
return beanA;
}
@Bean
public BeanB beanB() {
BeanB beanB = new BeanB();
beanB.setBeanB(beanA());
return beanB;
}
}
我有一个AppManager
正在注入BeanB
@Component
public class AppManager {
@Autowired
BeanB beanB;
public void myMethod(){
beanB.<some_method>();
....
}
}
以上代码捆绑成一个jar,并作为依赖项包含在Web应用程序中。下面是Web应用程序端的代码,它充当此jar的客户端。
@ComponentScan(basePackages = "com.mypackage")
public class Client {
private static ApplicationContext applicationContext;
public static void main(String[] args) {
applicationContext = new AnnotationConfigApplicationContext(Client.class);
AppManager appManager = applicationContext.getBean(AppManager.class);
appManager.myMethod(...);
}
}
问题夫妇-
@ComponentScan(basePackages = "com.mypackage")
,则会收到No qualifying bean of type AppManager
错误。如何避免在包装上使用@ComponentScan
?这是一个具有多个客户端的共享jar,我不希望每个客户端都知道需要扫描的软件包。 AppManager
中的Client
自动布线,而不要先获取ApplicationContext
然后再添加bean吗? 我希望客户端类像-
public class Client {
@Autowired
private AppManager appManager;
public void aMethdod() {
appManager.myMethod(...);
}
}