There are a couple of options available.
First of all, you can use it as a normal dependency and use a factory bean to instantiate your object.
@Component
public class MyFactoryBean {
private Repository repository;
@Autowired
public MyFactoryBean(Repository repository) {
this.repository = repository;
}
public Instance getInstance(Parameter parameter) {
return new Instance(repository, parameter);
}
}
If your parameter
does not change at runtime, you can provide a bean in your configuration:
@Configuration
public class MyConfiguration {
private Repository repository;
@Autowired
public MyConfiguration(Repository repository) {
this.repository = repository;
}
@Bean
public Instance instance(){
Parameter parameter = ... // value in a config file or static value
return new Instance(repository, parameter);
}
}
Also, you can use the AutowireCapableBeanFactory
to inject dependencies as normal for objects not managed by Spring. Remember that you need to use setter injection tough.
private AutowireCapableBeanFactory beanFactory;
@Autowired
public MyFactoryBean(AutowireCapableBeanFactory beanFactory) {
this.beanFactory = beanFactory;
}
public void doStuff() {
MyService service = new MyService();
beanFactory.autowireBean(service); // dependencies will be autowired
}