在不使用web.xml的情况下加载应用程序上下文
问题描述:
我想知道是否有方法来加载弹簧应用程序上下文,而无需在web.xml中定义它。在不使用web.xml的情况下加载应用程序上下文
我看你可以使用:
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
但是,如果你想使用你必须的getBean豆()能够访问它。我想可能有一种方法可以像web xml中的定义一样以编程方式加载上下文,而无需调用getBean。
任何想法?
答
有一种方法。你只需要阅读官方文档。相关部分是here。
编辑:抱歉,误读了您的问题。您可以使用
ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
并在应用程序启动时使用ServletContextListener
加载它。当你的应用程序启动时,如果你已经正确配置了你的bean配线,你不应该调用getBean()来访问你所有的bean。像对待Java SE一样对待它。
答
您可以使用:
ctx.getAutowireCapableBeanFactory().autowireBeanProperties(this,
AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);
...其中CTX是你的ClassPathXmlApplicationContext以避免需要调用过的getBean() - 上this
任何Spring bean字段将被装配为您服务。
我没有看到任何可以工作*的部分,而无需在web.xml中定义它* – 2010-11-11 09:43:56
您的意思是我需要的是ServletContextListener中的ClassPathXmlApplicationContext实例,它会为我完成剩下的工作吗? – Bitmap 2010-11-11 10:08:31
@Bitmap:差不多。您仍然需要将** getBean()**用于布线层次结构中的“顶级”bean。规则是:如果您使用“new”关键字创建bean,则不会使用Spring连线。如果你为应用程序制作一个静态公共getter。 ServletContextListener中的上下文,你可以在需要的时候毫不费力地获得你的bean。 – darioo 2010-11-11 10:10:19