@Component(immediate=true) @Instantiate public class Controller { @Requires(filter="(factory.name=A)") Factory factoryOfA; @Requires(filter="(factory.name=B)") Factory factoryOfB; ComponentInstance instance; @Validate public void createA() throws Exception { instance = factoryOfA.createInstance(null); } public void switchToB() throws Exception { instance.dispose(); instance = factoryOfB.createInstance(null); } }
protected <T> T createNewUnproxiedInstance(final String factoryName) { final Factory<T> factory = this.<T>getFactory(factoryName); registerIncompleteInstance(factoryName); final T instance = factory.createInstance(getContextManager()); unregisterIncompleteInstance(factoryName, instance); registerInstance(instance, factory); factory.invokePostConstructs(instance); return instance; }
@Override public <T> T getNewInstance(final String factoryName) { final Factory<T> factory = getFactory(factoryName); final Proxy<T> proxy = factory.createProxy(this); final T instance = factory.createInstance(getContextManager()); if (proxy != null) { proxy.setInstance(instance); } factory.invokePostConstructs(instance); registerInstance(instance, factory); return (proxy != null) ? proxy.asBeanType() : instance; }