
com.github.nill14.utils.init.integration.LazyPojoFactory Maven / Gradle / Ivy
The newest version!
package com.github.nill14.utils.init.integration;
import javax.inject.Provider;
import com.github.nill14.utils.init.api.IBeanDescriptor;
import com.github.nill14.utils.init.api.IPojoFactory;
import com.github.nill14.utils.init.api.IPropertyResolver;
import com.github.nill14.utils.init.impl.ProviderTypePojoFactory;
import com.github.nill14.utils.init.impl.BeanTypePojoFactory;
import com.github.nill14.utils.init.impl.CallerContext;
import com.google.common.reflect.TypeToken;
public /*non-final on purpose*/ class LazyPojoFactory implements IPojoFactory {
public static LazyPojoFactory forClass(Class beanClass) {
return new LazyPojoFactory<>(TypeToken.of(beanClass));
}
public static > LazyPojoFactory forFactory(Class factoryType) {
return new LazyPojoFactory<>(TypeToken.of(factoryType), factoryType);
}
private static final long serialVersionUID = 1L;
private final boolean doubleFactory;
private final IPojoFactory delegate;
private final TypeToken factoryToken;
protected LazyPojoFactory(TypeToken beanType) {
delegate = new BeanTypePojoFactory<>(beanType);
factoryToken = beanType;
this.doubleFactory = false;
}
//class type F is here G - factory
@SuppressWarnings("unchecked")
protected > LazyPojoFactory(TypeToken factoryType, Class factoryClass) {
ProviderTypePojoFactory factoryAdapter = new ProviderTypePojoFactory(factoryType);
this.factoryToken = (TypeToken) factoryType;
this.delegate = (IPojoFactory) factoryAdapter;
this.doubleFactory = true;
}
public boolean isDoubleFactory() {
return doubleFactory;
}
@Override
public F newInstance(IPropertyResolver resolver, CallerContext context) {
F instance = delegate.newInstance(resolver, context);
resolver.initializeBean(getDescriptor(), instance, context);
return instance;
}
@Override
public TypeToken getType() {
return factoryToken;
}
@Override
public IBeanDescriptor getDescriptor() {
return delegate.getDescriptor();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy