package ch.qos.logback.core.joran.util.beans;

import java.util.HashMap;
import java.util.Map;

import ch.qos.logback.core.Context;
import ch.qos.logback.core.spi.ContextAwareBase;

Cache for BeanDescription instances. All the cache users which use the same instance of BeanDescriptionCache can profit from each others cached bean descriptions.

The cache is not thread-safe and should not be shared across configurator instances.

Author:urechm
/** * * Cache for {@link BeanDescription} instances. All the cache users which use * the same instance of BeanDescriptionCache can profit from each others cached * bean descriptions. * * <p>The cache is not thread-safe and should not be shared across configurator instances. * * @author urechm * */
public class BeanDescriptionCache extends ContextAwareBase { private Map<Class<?>, BeanDescription> classToBeanDescription = new HashMap<Class<?>, BeanDescription>(); private BeanDescriptionFactory beanDescriptionFactory; public BeanDescriptionCache(Context context) { setContext(context); } private BeanDescriptionFactory getBeanDescriptionFactory() { if (beanDescriptionFactory == null) { beanDescriptionFactory = new BeanDescriptionFactory(getContext()); } return beanDescriptionFactory; }
Returned bean descriptions are hold in a cache. If the cache does not contain a description for a given class, a new bean description is created and put in the cache, before it is returned.
Params:
  • clazz – to get a bean description for.
Returns:a bean description for the given class.
/** * Returned bean descriptions are hold in a cache. If the cache does not * contain a description for a given class, a new bean description is * created and put in the cache, before it is returned. * * @param clazz * to get a bean description for. * @return a bean description for the given class. */
public BeanDescription getBeanDescription(Class<?> clazz) { if (!classToBeanDescription.containsKey(clazz)) { BeanDescription beanDescription = getBeanDescriptionFactory().create(clazz); classToBeanDescription.put(clazz, beanDescription); } return classToBeanDescription.get(clazz); } }