2010-11-11 123 views
1

我想知道是否有方法来加载弹簧应用程序上下文,而无需在web.xml中定义它。在不使用web.xml的情况下加载应用程序上下文

我看你可以使用:

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

但是,如果你想使用你必须的getBean豆()能够访问它。我想可能有一种方法可以像web xml中的定义一样以编程方式加载上下文,而无需调用getBean。

任何想法?

回答

0

有一种方法。你只需要阅读官方文档。相关部分是here

编辑:抱歉,误读了您的问题。您可以使用

ClassPathXmlApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml"); 

并在应用程序启动时使用ServletContextListener加载它。当你的应用程序启动时,如果你已经正确配置了你的bean配线,你不应该调用getBean()来访问你所有的bean。像对待Java SE一样对待它。

+0

我没有看到任何可以工作*的部分,而无需在web.xml中定义它* – 2010-11-11 09:43:56

+0

您的意思是我需要的是ServletContextListener中的ClassPathXmlApplicationContext实例,它会为我完成剩下的工作吗? – Bitmap 2010-11-11 10:08:31

+0

@Bitmap:差不多。您仍然需要将** getBean()**用于布线层次结构中的“顶级”bean。规则是:如果您使用“new”关键字创建bean,则不会使用Spring连线。如果你为应用程序制作一个静态公共getter。 ServletContextListener中的上下文,你可以在需要的时候毫不费力地获得你的bean。 – darioo 2010-11-11 10:10:19

1

您可以使用:

ctx.getAutowireCapableBeanFactory().autowireBeanProperties(this, 
        AutowireCapableBeanFactory.AUTOWIRE_BY_TYPE, true);   

...其中CTX是你的ClassPathXmlApplicationContext以避免需要调用过的getBean() - 上this任何Spring bean字段将被装配为您服务。

相关问题