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

com.webapp.utils.spring.CtxBeanUtils Maven / Gradle / Ivy

The newest version!
package com.webapp.utils.spring;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.DefaultListableBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.core.env.MutablePropertySources;
import org.springframework.stereotype.Component;
import org.springframework.util.StringUtils;

@Component
public class CtxBeanUtils implements ApplicationContextAware {

	private static final Logger logger = LoggerFactory.getLogger(CtxBeanUtils.class);
	private static ApplicationContext ctx = null;

	public static  void addBean(Class clz){
		ConfigurableApplicationContext cactx = (ConfigurableApplicationContext) ctx;
		DefaultListableBeanFactory bf = (DefaultListableBeanFactory)cactx.getBeanFactory();
		BeanDefinitionBuilder builder = BeanDefinitionBuilder.genericBeanDefinition(clz);

		bf.registerBeanDefinition(StringUtils.uncapitalize(clz.getSimpleName()), builder.getRawBeanDefinition());

	}

    public void setApplicationContext(ApplicationContext context) throws BeansException {
		ctx = context;

	    try {
	    	MutablePropertySources mps = CtxPropsResolver.initPropertySources(true);
	    	CtxPropsResolver.resolverPropertySourcesPlaceholder(ctx, mps);
	    	CtxPropsResolver.resolverPropertyPlaceholder(ctx, mps);
	    	CtxPropsResolver.resolverPropertyFactory(ctx, mps);
	    	CtxPropsResolver.inject(ctx, mps);
        } catch (Exception e) {
	        logger.error("Error collecting property", e);
        }
    }

	public static  T getBean(Class clz) {
		checkAppCtx();
		return ctx.getBean(clz);
    }

	public static Object getBean(String name) {
		checkAppCtx();
		return ctx.getBean(name);
    }

	public static Object getBeanTarget(String name) {
		checkAppCtx();
		return AopTargetUtils.getTarget(ctx.getBean(name));
    }

	public static void showBean() {
		checkAppCtx();
		String[] beans = ctx.getBeanDefinitionNames();
		Arrays.parallelSort(beans);

		List full = new ArrayList<>();
		int i=0;
		for(String bean : beans){
			if(bean.contains(".")) {
				full.add(bean);
				continue;
			}
			System.out.println(++i + " " + bean);
			System.out.println("\t|--" + ctx.getBean(bean).getClass());
		}
		System.out.println("-------------------------------------------");
		for(String bean : full){
			System.out.println(++i + " " + bean);
			System.out.println("\t|--" + ctx.getBean(bean).getClass());
		}
	}

	public static ApplicationContext getAppCtx() {
		checkAppCtx();
		return ctx;
	}

	public static void cleanAppCtx() {
		ctx = null;
	}

	private static void checkAppCtx() {
		if (ctx == null) {
			throw new IllegalStateException("applicaitonContext is null");
		}
	}


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy