* @param instance An instance to be wrapped, or null if a new instance should be created
* @return the component instance
*/
protected final BasicComponentInstance constructComponentInstance(ManagedReference instance, boolean invokePostConstruct) {
// Interceptor factory context
final SimpleInterceptorFactoryContext context = new SimpleInterceptorFactoryContext();
context.getContextData().put(Component.class, this);
// Create the post-construct interceptors for the ComponentInstance
final Interceptor componentInstancePostConstructInterceptor = this.getPostConstruct().create(context);
// create the pre-destroy interceptors
final Interceptor componentInstancePreDestroyInterceptor = this.getPreDestroy().create(context);
@SuppressWarnings("unchecked")
final AtomicReference<ManagedReference> instanceReference = (AtomicReference<ManagedReference>) context.getContextData().get(BasicComponentInstance.INSTANCE_KEY);
instanceReference.set(instance);
final Map<Method, InterceptorFactory> interceptorFactoryMap = this.getInterceptorFactoryMap();
// This is an identity map. This means that only <b>certain</b> {@code Method} objects will