【问题标题】:JavaConfig Spring make beans available to all applicationJavaConfig Spring 使 bean 可用于所有应用程序
【发布时间】:2017-01-25 10:21:08
【问题描述】:

我有一个带有 main 方法的 jar。我使用 @Configuration 注释创建了一个 java 配置。

@Configuration
@ComponentScan(basePackages = { "com.test.commons" })
public class ProxyConfig {

}

在这个 com.test.commons 我放了一个服务

package com.test.commons;

@Service
public class RestService {

    //do rest calls
    public String restGetCall(URL url){
        ...
    }
}

我不是要这个

AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
        context.register(ProxyConfig.class);
        context.getBean("myBean");

主要

    @SpringBootApplication(scanBasePackages={"com.test.commons", "com.test.soapproxy" })
    public class MainAppProxy 

    {
        private final static Logger logger = LoggerFactory.getLogger(MainAppProxy.class);
        public static void main( String[] args )
        {
            SpringApplication.run(MainAppProxy.class, args);
            // Choose environment from the arguments
            String env = args[0];
            // publish an endpoint here
            Configuration config = null;
            config = configs.properties
                (new File("config_"+env+".properties"));
        Endpoint.publish(endpointAddress, new SomeProxyImpl(config));

我试图注入 bean 的类(这里真的需要 @Component 吗?)

@Component
public class SomeProxyImpl implements SomeServiceSoap {
@Autowired  RestService restService;

我希望能够通过 @Autowired 在我的所有应用程序中注入这个 RestService bean,而不仅仅是在 SomeProxyImpl 中(无论如何它都不起作用)。我该怎么做?

【问题讨论】:

  • 你是否使用过scanBasePackages :@SpringBootApplication(scanBasePackages = { ..}
  • 在您的控制器中自动连接您的RestService。这将满足您的需求。
  • @melihcoskun 我刚刚做到了。 Autowired 无法注入我的 bean。
  • 你需要@Autowire SomeProxyImpl 不要使用new 就可以了。您可以在该主类中自动装配。并将Endpoint.publish方法放入另一个方法中(不是main中),放入一个用@PostConstruct注解的方法

标签: java spring


【解决方案1】:

Spring 不会自动装配由新创建的字段,除非您要求它,例如:ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().autowireBean(object);

如果您的 SomeProxyImpl 类在“com.test.soapproxy”包中,并且您的类使用@Component 进行注释,那么 Spring 必须创建了一个自动装配 bean 的实例。 然后你应该从你的上下文中获取这个 bean 并使用它而不是创建一个新的。

【讨论】:

  • ApplicationContextHolder 不是 spring jar 中包含的类?
  • 嗯,对不起,这是我们内部框架中的一个类……但它只是一个实现“ApplicationContextAware”的类,可以很容易地为我们提供Spring ApplicationContext。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-15
  • 2020-01-10
  • 1970-01-01
相关资源
最近更新 更多