View Javadoc

1   package org.springframework.osgi.atlassian;
2   
3   import org.slf4j.Logger;
4   import org.slf4j.LoggerFactory;
5   import org.springframework.beans.factory.BeanCreationException;
6   import org.springframework.beans.factory.BeanDefinitionStoreException;
7   import org.springframework.beans.factory.BeanFactory;
8   import org.springframework.beans.factory.support.BeanDefinitionValidationException;
9   import org.springframework.beans.factory.support.DefaultListableBeanFactory;
10  import org.springframework.beans.factory.support.RootBeanDefinition;
11  
12  /**
13   * ListableBeanFactory that does not use JAAS due to performance reasons:
14   * http://word-bits.flurg.com/jaas-is-terrible-and-there-is-no-escape-from-it/
15   *
16   * @since 3.2.16
17   */
18  public class UnsecureListableBeanFactory extends DefaultListableBeanFactory
19  {
20      private static final Logger log = LoggerFactory.getLogger(UnsecureListableBeanFactory.class);
21  
22      public UnsecureListableBeanFactory(BeanFactory parentBeanFactory)
23      {
24          super(parentBeanFactory);
25      }
26  
27      /**
28       * Duplicates the behaviour in {@link DefaultListableBeanFactory} with the
29       * exception of removing calls to JAAS.
30       */
31      protected Object createBean(final String beanName, final RootBeanDefinition mbd, final Object[] args)
32              throws BeanCreationException
33      {
34          log.debug("Creating instance of bean '{}'", beanName);
35  
36          // Make sure bean class is actually resolved at this point.
37          resolveBeanClass(mbd, beanName);
38  
39          // Prepare method overrides.
40          try {
41              mbd.prepareMethodOverrides();
42          }
43          catch (BeanDefinitionValidationException ex) {
44              throw new BeanDefinitionStoreException(mbd.getResourceDescription(),
45                      beanName, "Validation of method overrides failed", ex);
46          }
47  
48          try {
49              // Give BeanPostProcessors a chance to return a proxy instead of the target bean instance.
50              Object bean = resolveBeforeInstantiation(beanName, mbd);
51              if (bean != null) {
52                  return bean;
53              }
54          }
55          catch (Throwable ex) {
56              throw new BeanCreationException(mbd.getResourceDescription(), beanName,
57                      "BeanPostProcessor before instantiation of bean failed", ex);
58          }
59  
60          log.debug("Finished creating instance of bean '{}'", beanName);
61          return doCreateBean(beanName, mbd, args);
62      }
63  }