1. Project Clover database Fri Apr 29 2016 13:24:33 CEST
  2. Package info.magnolia.module.blossom.support

File BeanFactoryUtils.java

 

Coverage histogram

../../../../../img/srcFileCovDistChart8.png
42% of files have more coverage

Code metrics

12
18
4
1
109
50
12
0.67
4.5
4
3

Classes

Class Line # Actions
BeanFactoryUtils 54 18 0% 12 9
0.735294173.5%
 

Contributing tests

This file is covered by 2 tests. .

Source view

1    /**
2    * This file Copyright (c) 2010-2016 Magnolia International
3    * Ltd. (http://www.magnolia-cms.com). All rights reserved.
4    *
5    *
6    * This file is dual-licensed under both the Magnolia
7    * Network Agreement and the GNU General Public License.
8    * You may elect to use one or the other of these licenses.
9    *
10    * This file is distributed in the hope that it will be
11    * useful, but AS-IS and WITHOUT ANY WARRANTY; without even the
12    * implied warranty of MERCHANTABILITY or FITNESS FOR A
13    * PARTICULAR PURPOSE, TITLE, or NONINFRINGEMENT.
14    * Redistribution, except as permitted by whichever of the GPL
15    * or MNA you select, is prohibited.
16    *
17    * 1. For the GPL license (GPL), you can redistribute and/or
18    * modify this file under the terms of the GNU General
19    * Public License, Version 3, as published by the Free Software
20    * Foundation. You should have received a copy of the GNU
21    * General Public License, Version 3 along with this program;
22    * if not, write to the Free Software Foundation, Inc., 51
23    * Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
24    *
25    * 2. For the Magnolia Network Agreement (MNA), this file
26    * and the accompanying materials are made available under the
27    * terms of the MNA which accompanies this distribution, and
28    * is available at http://www.magnolia-cms.com/mna.html
29    *
30    * Any modifications to this file must keep this entire header
31    * intact.
32    *
33    */
34    package info.magnolia.module.blossom.support;
35   
36    import java.util.List;
37   
38    import org.slf4j.Logger;
39    import org.slf4j.LoggerFactory;
40    import org.springframework.beans.factory.DisposableBean;
41    import org.springframework.beans.factory.config.BeanPostProcessor;
42    import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;
43    import org.springframework.beans.factory.config.DestructionAwareBeanPostProcessor;
44    import org.springframework.beans.factory.support.AbstractBeanFactory;
45    import org.springframework.beans.factory.support.BeanDefinitionBuilder;
46    import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
47    import org.springframework.beans.factory.support.BeanDefinitionRegistry;
48   
49    /**
50    * Utility methods for BeanFactory.
51    *
52    * @since 1.2
53    */
 
54    public class BeanFactoryUtils {
55   
56    private static final Logger logger = LoggerFactory.getLogger(BeanFactoryUtils.class);
57   
58    /**
59    * Destroys a bean by applying destruction aware post processors and invoking destroy methods.
60    */
 
61  3 toggle public static void destroyBean(Object bean, String beanName, AbstractBeanFactory beanFactory) {
62  3 applyBeanPostProcessorsBeforeDestruction(bean, beanName, beanFactory);
63  3 disposeBean(bean, beanName);
64    }
65   
66    /**
67    * Invokes destroy method on the bean if it implements DisposableBean.
68    */
 
69  3 toggle public static void disposeBean(Object bean, String beanName) {
70  3 if (bean instanceof DisposableBean) {
71  3 try {
72  3 ((DisposableBean) bean).destroy();
73    } catch (Throwable ex) {
74  0 String msg = "Invocation of destroy method failed on bean with name '" + beanName + "'";
75  0 if (logger.isDebugEnabled()) {
76  0 logger.warn(msg, ex);
77    } else {
78  0 logger.warn(msg + ": " + ex);
79    }
80    }
81    }
82    }
83   
84    /**
85    * Applies destruction aware post processors on the supplied bean.
86    */
 
87  3 toggle public static void applyBeanPostProcessorsBeforeDestruction(Object bean, String beanName, AbstractBeanFactory beanFactory) {
88  3 List<BeanPostProcessor> beanPostProcessors = beanFactory.getBeanPostProcessors();
89  3 if (beanPostProcessors != null && !beanPostProcessors.isEmpty()) {
90  24 for (int i = beanPostProcessors.size() - 1; i >= 0; i--) {
91  21 Object postProcessor = beanPostProcessors.get(i);
92  21 if (postProcessor instanceof DestructionAwareBeanPostProcessor) {
93  3 ((DestructionAwareBeanPostProcessor) postProcessor).postProcessBeforeDestruction(bean, beanName);
94    }
95    }
96    }
97    }
98   
99    /**
100    * Registers a bean definition for the specified class if no bean definition already exists for the class. The bean
101    * definition is given a generated name unique within the bean factory.
102    */
 
103  12 toggle public static void registerBeanIfMissing(ConfigurableListableBeanFactory beanFactory, BeanDefinitionRegistry registry, Class<?> beanClass) {
104  12 if (beanFactory.getBeanNamesForType(beanClass).length == 0) {
105  12 BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(beanClass);
106  12 BeanDefinitionReaderUtils.registerWithGeneratedName(builder.getBeanDefinition(), registry);
107    }
108    }
109    }