简体   繁体   中英

JavaConfig Spring make beans available to all application

I have a jar with a main method. I created a java config with the @Configuration annotation.

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

}

In this com.test.commons I have put a service

package com.test.commons;

@Service
public class RestService {

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

I am NOT asking for this

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

The main

    @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));

The class in which I am trying to inject the bean (is the @Component needed here really?)

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

I would like to be able to inject this RestService bean through @Autowired in all my application, not only in SomeProxyImpl(which is not working anyway). How can I do that?

Spring don't autowire field created by a new, unless you ask for it, like this : ApplicationContextHolder.getContext().getAutowireCapableBeanFactory().autowireBean(object);

If your SomeProxyImpl class is in the "com.test.soapproxy" package, and your class is annotated with @Component, then Spring must have created an instance with the bean autowired. You should then get this bean from your context and use it instead of creating a new one.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM