框架对Spring的扩展

为了便于二次开发定制产品代码,定义了OverrideExsitsBean,凡是标记此注解的Bean都将覆盖其父类,框架需要实现凡是使用到其父类的地方都要创建一个此类的实例。实现此功能,自然从Spring入手最彻底,这样Action、Service/Manager都能够支持这种特性。

Spring创建Bean的工厂是DefaultListableBeanFactory,自然扩展此类即可。但是Web.xml中可以接触到的是ContextLoaderListener。因此我们需要先扩展ContextLoaderListener,确保ContextLoaderListener创建的是我们扩展的DefaultListableBeanFactory:

 

public class StmgContextLoaderListener extends ContextLoaderListener {
	@Override
	public void contextInitialized(ServletContextEvent event) {
		String packages = event.getServletContext().getInitParameter(CONFIG_PACKAGES_PARAM);
		packagesToScan = packages!=null ? packages.split(",") : null;		
		super.contextInitialized(event);
		SpringTools.context = WebApplicationContextUtils.getWebApplicationContext(event.getServletContext());
	}

	@Override
	protected ContextLoader createContextLoader() {
		ContextLoader contextLoader = new ContextLoader() {
			@Override
			protected Class determineContextClass(ServletContext servletContext) throws ApplicationContextException {
				Class contextClass = super.determineContextClass(servletContext);
				
				if(contextClass == XmlWebApplicationContext.class) {
					return XmlWebApplicationContextExt.class;
				}
				
				return contextClass;
			}
			
			@Override
			protected WebApplicationContext createWebApplicationContext(
					ServletContext servletContext, ApplicationContext parent) throws BeansException {

				Class contextClass = determineContextClass(servletContext);
				if (!ConfigurableWebApplicationContext.class.isAssignableFrom(contextClass)) {
					throw new ApplicationContextException("Custom context class [" + contextClass.getName() +
							"] is not of type [" + Conf
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值