首页

基于springframework的ConfigurableListableBeanFactory的bean工厂类代码中注册bean单例对象代码示例

标签:springframework,ClassPathXmlApplicationContext,ConfigurableListableBeanFactory,ConfigurableWebApplicationContext,BeanFactoryPostProcessor     发布时间:2017-10-24   

一、前言

最近在做业务基础架构的重构,需要将大量规则类通过核心层代码在抽象层注入进来,以保证开发层的高度不可见(不能将大量的规则类暴露在spring的bean配置文件或auto注入上、或鉴于规则动态、顺序加载等需要),这边借助于org.springframework.beans.factory.config.ConfigurableListableBeanFactory代码层面注入规则bean方式示例

二、主要代码

下面通过SpringBean(spring-beans-3.0.2.RELEASE.jar.zip)的registerSingleton方法可以向spring上下文中直接注入Bean

import javax.sql.DataSource;@b@import org.springframework.beans.BeansException;@b@import org.springframework.beans.factory.config.BeanFactoryPostProcessor;@b@import org.springframework.beans.factory.config.ConfigurableListableBeanFactory;@b@import org.springframework.context.support.ClassPathXmlApplicationContext;@b@import org.springframework.core.io.ClassPathResource;@b@import org.springframework.core.io.Resource;@b@import org.mybatis.spring.SqlSessionFactoryBean;@b@import org.mybatis.spring.mapper.MapperScannerConfigurer;@b@import com.xwood.pms.dao.impl.CommonDao;@b@@b@ @b@public class SpringBean<O> {@b@@b@	public static ClassPathXmlApplicationContext context;@b@	@b@	private static String  _paramString;@b@	@b@	private static Object  _paramObject;@b@	@b@	static{@b@		 context = new ClassPathXmlApplicationContext(@b@		"classpath:test/applicationContext.xml");@b@		 @b@	}@b@	@b@	public  static  void  registerSingleton(String paramString, Object paramObject){@b@		@b@		_paramString=paramString;@b@		_paramObject=paramObject;@b@		@b@		context.addBeanFactoryPostProcessor(new BeanFactoryPostProcessor(){@b@			@Override@b@			public void postProcessBeanFactory(@b@					ConfigurableListableBeanFactory beanFactory)@b@					throws BeansException {@b@				beanFactory.registerSingleton(_paramString,_paramObject);@b@			};@b@		@b@		});@b@	}@b@	@b@	public static Object getBean(String id){@b@		return (Object)context.getBean(id);@b@	}@b@	@b@	public O getBean_(String id){@b@		@b@		return (O)context.getBean(id);@b@	}@b@	@b@	public static void main(String[] args){@b@		@b@		@b@		//1.获取bean@b@		CommonDao bdao=(CommonDao)SpringBean.getBean("commonDao");@b@		System.out.println("##");@b@		@b@		@b@		//2.注入mybatis@b@		SqlSessionFactoryBean  _factorybean=new SqlSessionFactoryBean();@b@		_factorybean.setDataSource((DataSource)SpringBean.getBean("dataSource"));@b@		_factorybean.setMapperLocations(new Resource[]{new ClassPathResource(_defaultCoreMapperLocations)});@b@		_factorybean.setTypeAliasesPackage(defaultCorePackage+".record");@b@		@b@		registerSingleton("sqlSessionFactoryCore",_factorybean);@b@@b@		MapperScannerConfigurer  _configurer=new MapperScannerConfigurer();@b@		_configurer.setBasePackage(defaultCorePackage+".dao");@b@		_configurer.setMarkerInterface(com.xwood.core.bean.InitialzationBeanMapper.class);@b@		_configurer.setSqlSessionFactoryBeanName("sqlSessionFactoryCore");@b@		@b@		registerSingleton("mapperScannerConfigurerCore",_configurer);@b@		@b@	}@b@	@b@}