All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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