
com.github.nill14.utils.init.impl.BeanInstancePojoFactory Maven / Gradle / Ivy
The newest version!
package com.github.nill14.utils.init.impl;
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.inject.PojoInjectionDescriptor;
import com.google.common.reflect.TypeToken;
public final class BeanInstancePojoFactory implements IPojoFactory {
@SuppressWarnings("unchecked")
public static IPojoFactory singleton(T singleton) {
return new BeanInstancePojoFactory((TypeToken) TypeToken.of(singleton.getClass()), singleton);
}
public static BeanInstancePojoFactory nullFactory(Class nullType) {
return new BeanInstancePojoFactory(TypeToken.of(nullType), null);
}
public static BeanInstancePojoFactory of(TypeToken typeToken, T instance) {
return new BeanInstancePojoFactory(typeToken, instance);
}
private static final long serialVersionUID = 1L;
private final TypeToken typeToken;
private final T instance;
/** Cache the beanDescriptor */
private IBeanDescriptor beanDescriptor;
public BeanInstancePojoFactory(TypeToken typeToken, T instance) {
this.typeToken = typeToken;
this.instance = instance;
}
protected BeanInstancePojoFactory(IBeanDescriptor beanDescriptor, T instance) {
this.typeToken = beanDescriptor.getToken();
this.beanDescriptor = beanDescriptor;
this.instance = instance;
}
@Override
public T newInstance(IPropertyResolver resolver, CallerContext context) {
return instance;
}
@Override
public TypeToken getType() {
return typeToken;
}
@Override
public IBeanDescriptor getDescriptor() {
//avoiding synchronization on purpose
IBeanDescriptor h = beanDescriptor;
if (h == null) {
h = new PojoInjectionDescriptor<>(typeToken);
beanDescriptor = h;
}
return h;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy