Hi,
I've created a @configuration class for feature toggling and want to @Autowired it.
All i've managed to do is to inject it with the following code:
AnnotationConfigApplicationContext appContext = new AnnotationConfigApplicationContext(ServiceConfig.class);
GenericService service = (GenericService) appContext.getBean("getService");
System.out.println(service.whoAmI());
I want to prevent all of this code and just do:
@Autowired
GenericService service;
System.out.println(service.whoAmI());
but all i get is null pointer exception. any help will be appreciated.
application-context.xml:
ServiceConfig:
@Configuration
public class ServiceConfig {
@Bean
public DefaultService getDefaultService() {
return new DefaultService();
}
@Bean
public HighPerformanceService getHighPerformanceService() {
return new HighPerformanceService();
}
@Bean
public GenericService getService() {
FeatureProxyFactoryBean proxyFactoryBean = new FeatureProxyFactoryBean();
proxyFactoryBean.setActive(getHighPerformanceService());
proxyFactoryBean.setInactive(getDefaultService());
proxyFactoryBean.setFeature(FeatureList.OPTIMIZED_SITE_FEATURE.name());
proxyFactoryBean.setProxyType(GenericService.class);
try {
return (GenericService) proxyFactoryBean.getObject();
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
}
DefaultService.java:
public class DefaultService implements GenericService{
@Override
public String whoAmI() {
return "DefaultService";
}
}
GenericService.java:
public interface GenericService {
public String whoAmI();
}
HighPerformanceService.java:
public class HighPerformanceService implements GenericService{
@Override
public String whoAmI() {
return "HighPerformanceService";
}
}