当前位置: 首页 > 面试题库 >

在类路径的jar中加载Spring应用程序上下文文件

百里默
2023-03-14
问题内容

我试图在我的Java独立代码中使用ClassPathXmlApplicationContext来加载位于我的类路径中的jar文件内部的applicationContext.xml

ApplicationContext context = new ClassPathXmlApplicationContext("classpath*:**/applicationContext*.xml");

applicationContext.xml条目如下,

 <bean id="myAdder" class="com.foo.bar.MyAdder">
        <property name="floatAdder" ref="floatAdder"/>        
    </bean>

而且,当我尝试以这种方式加载bean时,我得到了NoSuchBeanException。不能通过这种方式加载bean吗?

jar文件作为maven依赖项添加到我的类路径中。当我在该项目的Eclipse中看到Java Build Path时,看到该jar链接为M2_REPO /…/.。

我以为我可以在jar文件中加载bean,因为jar是以这种方式位于类路径中。我想念什么吗?

谢谢


问题答案:

这应该工作,我刚刚创建了2个项目并进行了检查。

项目A(使用STS创建的标准Maven项目)applicationContext.xml位于src / main / resources中。

pom.xml:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.D</groupId>
<artifactId>A</artifactId>
<version>0.0.1-SNAPSHOT</version>

<properties>        
    <spring.version>3.0.5.RELEASE</spring.version>
</properties>

<dependencies>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        <version>${spring.version}</version>
    </dependency>
</dependencies>
</project>

applicationContext.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="myAdder" class="com.foo.bar.MyAdder">
    <property name="foo" value="bar" />
</bean>

</beans>

项目B:

pom.xml:与A相同,只是添加了A作为依赖项:

<dependency>
   <groupId>org.D</groupId>
   <artifactId>A</artifactId>
   <version>0.0.1-SNAPSHOT</version>
</dependency>

项目B中的Start.java:

public static void main(String[] args) {
    ApplicationContext context = new ClassPathXmlApplicationContext(
            "classpath*:**/applicationContext*.xml");

    MyAdder myAdder = (MyAdder) context.getBean("myAdder");
    System.out.println(myAdder.getFoo());
}

mvn首先安装A,然后在项目B中运行“启动”。



 类似资料:
  • 我正在尝试以编程方式设置一个spring boot应用程序上下文根。上下文根的原因是我们希望从访问应用程序,并将所有控制器路径附加到它。 下面是Web-App的应用程序配置文件。 这是主页面的索引控制器。 应用程序的新根应该位于,但它仍然位于。 我错过了什么导致spring boot没有在请求映射之前添加上下文根?

  • 问题内容: 我试图以编程方式设置一个Spring Boot应用程序上下文根。上下文根的原因是我们希望从中访问该应用,并将所有控制器路径附加到该应用。 这是Web应用程序的应用程序配置文件。 这是主页的索引控制器。 应用程序的新根目录应位于,但仍位于。 我错过了什么导致Spring Boot在请求映射之前不附加上下文根的问题? 问题答案: 你为什么要尝试推出自己的解决方案。Spring-boot已经

  • 我正在处理一个Spring Boot应用程序,其中我使用该应用程序公开SOAP WebService。我在Spring boot应用程序中使用Apache CFX framework for SOAP impl。我正在使用基于注释的方法。 我在一个bean中的Spring Boot配置文件中设置应用程序上下文时遇到了问题。下面是我的代码。 配置文件如下所示。 现在我有了bean SOAPproce

  • 我刚接触Spring。 到目前为止,在我的应用程序中,每次我需要使用bean时,我都会加载XML。 Application Context上下文=new ClassPathXmlApplication ationContext("Applicationontext.xml"); 因此,在每个需要加载特定bean的类中,我都使用上面的行。 在效率或正确使用方面,我想知道这是否是正确的使用(我怀疑不是

  • 我正在尝试找到一种方法来显式指定部署到Glassfish的Web应用程序的上下文路径3.1.2.2但到目前为止我还没有运气。有人能对此提供指导吗?背景如下: 我有一个Web应用程序,它由两个单独的Netbean(7.0)项目组成。第一个是Web服务,称为FOWS。第二个是使用FOWS网络服务的面向用户的Web应用程序。它被称为FooApp。 我最近将glassfish升级到3.1.2.2,希望解决

  • 我有一个spring boot应用程序abc.myapp.war,它部署在外部tomcat服务器上。默认情况下,tomcat使用war文件名作为部署的应用程序的上下文路径,因此它变成http://localhost:8080/abc.myapp,但我希望有一个自定义的上下文路径,如http://localhost:8080/abc/myapp。我阅读了其他帖子,他们建议在tomcat的server