在春季使用注释自动装配第三方jar

时间:2018-11-19 19:59:26

标签: java spring

我正在建立一个供多个客户端使用的库。它是基于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(...);
    }
}

问题夫妇-

  1. 如果我未指定@ComponentScan(basePackages = "com.mypackage"),则会收到No qualifying bean of type AppManager错误。如何避免在包装上使用@ComponentScan?这是一个具有多个客户端的共享jar,我不希望每个客户端都知道需要扫描的软件包。
  2. 我可以仅将AppManager中的Client自动布线,而不要先获取ApplicationContext然后再添加bean吗?

我希望客户端类像-

public class Client {
    @Autowired
    private AppManager appManager;

    public void aMethdod() {

        appManager.myMethod(...);
    }
}

0 个答案:

没有答案