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

cn.dreampie.common.spring.SpringBuilder Maven / Gradle / Ivy

There is a newer version: 1.3.0.RELEASE
Show newest version
package cn.dreampie.common.spring;

import cn.dreampie.common.util.Stringer;
import cn.dreampie.log.Logger;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ConfigurableApplicationContext;

import static cn.dreampie.common.util.Checker.checkNotNull;

/**
 * @author Dreampie
 * @date 2015-10-08
 * @what
 */
public class SpringBuilder {

  private final static Logger logger = Logger.getLogger(SpringBuilder.class);

  private static ConfigurableApplicationContext context;

  public static ConfigurableApplicationContext getContext() {
    return SpringBuilder.context;
  }

  public static void setContext(ConfigurableApplicationContext context) {
    checkNotNull(context, "Could not found context for spring.");
    SpringBuilder.context = context;
    SpringHolder.alive = true;
  }

  public static void refreshContext() {
    if (SpringHolder.alive) {
      SpringBuilder.context.refresh();
    }
  }

  public static void removeContext() {
    if (SpringHolder.alive) {
      SpringBuilder.context.close();
      SpringBuilder.context = null;
      SpringHolder.alive = false;
    }
  }

  /**
   * 注册bean
   *
   * @param clazz
   */
  public static void register(Class clazz) {
    ConfigurableApplicationContext context = getContext();
    if (context != null) {
      DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
      String beanName = Stringer.firstLowerCase(clazz.getSimpleName());
      beanFactory.registerBeanDefinition(beanName, BeanDefinitionBuilder.rootBeanDefinition(clazz).getBeanDefinition());
    }
  }

  public static void registerSingleton(Class clazz) {
    try {
      registerSingleton(clazz, clazz.newInstance());
    } catch (InstantiationException e) {
      logger.error(e.getMessage(), e);
    } catch (IllegalAccessException e) {
      logger.error(e.getMessage(), e);
    }
  }

  public static void registerSingleton(Class clazz, Object bean) {
    ConfigurableApplicationContext context = getContext();
    if (context != null) {
      DefaultListableBeanFactory beanFactory = (DefaultListableBeanFactory) context.getBeanFactory();
      String beanName = Stringer.firstLowerCase(clazz.getSimpleName());
      beanFactory.registerSingleton(beanName, bean);
    }
  }

  public static  T getBean(Class clazz) {
    ConfigurableApplicationContext context = getContext();
    if (context != null) {
      return context.getBean(clazz);
    }
    return null;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy