I\'d like to use FactoryBeans and scopes together. Specifically, I\'d like the object created and returned by a FactoryBean to be placed into a specified (perhaps custom) scope.
I solved the same issue using custom holder bean.
Factory bean:
@Component
@Configurable()
public class EventBusFactory implements FactoryBean {
@Override
public EventBus getObject() throws Exception {
return new SimpleEventBus();
}
@Override
public Class> getObjectType() {
return EventBus.class;
}
@Override
public boolean isSingleton() {
return false;
}
}
Bean holder:
@Configurable
@Component
@Scope("session")
public class EventBusHolder {
@Autowired
private EventBus eventBus;
public EventBus getEventBus() {
return eventBus;
}
public void setEventBus(EventBus eventBus) {
this.eventBus = eventBus;
}
}
And then I use holder instead of the required entity.
@Component
@Configurable
@Scope("session")
public class UicPlaceController extends PlaceController {
@Autowired
public UicPlaceController(EventBusHolder eventBus) {
super(eventBus.getEventBus());
}
...
}
The solution looks a little bit ugly, but still, it solves the issue.