🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
构造应用上下文的时候,需要字符串参数或数组作为资源,如xml文件的路径组成上下的定义. 当这样的位置路径没有前缀时,从该路径构建并用于加载bean定义的特定资源类型取决于特定的应用程序上下文并适合于该特定的应用程序上下文。 例如,如果您按照以下方式创建`ClassPathXmlApplicationContext`: ~~~java ApplicationContext ctx = new ClassPathXmlApplicationContext("conf/appContext.xml"); ~~~ 由于将使用ClassPathResource,因此将从类路径加载bean定义。 但是,如果您创建FileSystemXmlApplicationContext,如下所示: ~~~java ApplicationContext ctx = new FileSystemXmlApplicationContext("conf/appContext.xml"); ~~~ bean定义将从文件系统位置加载,在这种情况下,相对于当前工作目录。 请注意,在位置路径中使用特殊类前缀或标准URL前缀将覆盖创建的默认类型的资源。 所以下面这个`FileSystemXmlApplicationContext` ... ~~~ ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:conf/appContext.xml"); ~~~ 实际上会从类路径中加载它的bean定义。 但是,它仍然是一个FileSystemXmlApplicationContext。 如果随后将其用作ResourceLoader,则任何前缀不固定的路径仍将被视为文件系统路径。 ## Constructing ClassPathXmlApplicationContext instances - shortcuts `ClassPathXmlApplicationContext`公开了许多构造函数以方便实例化。 其基本思想是提供一个字符串数组,它只包含XML文件本身的文件名(没有前导路径信息),再提供一个`Class`; `ClassPathXmlApplicationContext`将从提供的类中派生路径信息。 举例说明,考虑下面的目录结构 ~~~file com/ foo/ services.xml daos.xml MessengerService.class ~~~ `services.xml`和` daos.xml`两个文件是bean的定义,`ClassPathXmlApplicationContext `的实例化如下: ~~~java ApplicationContext ctx = new ClassPathXmlApplicationContext( new String[] {"services.xml", "daos.xml"}, MessengerService.class); ~~~