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

如何在Spring项目中知道从中加载bean的资源。

屠德宇
2023-03-14
问题内容

我是Spring框架的新手。我试图知道加载bean时引用的xml文件列表。

通过编写一个ApplicationContextAware类,我可以使用以下命令查看bean列表:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/sample-testcontext.xml")

public class SampleClass implements ApplicationContextAware {
    @Autowired
    ApplicationContext applicationContext;

    @Test
    public void testMethod() {

        for (String beanName : applicationContext.getBeanDefinitionNames()) {
            System.out.println("BeanName " + beanName);
        }
    }
}

但是我想知道从哪个配置文件中加载bean。

说“ sample-testcontext.xml”包含

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


    <beans:import resource="classpath*:spring/sample-testOneMorecontext.xml"/>
</beans:beans>

我想知道从中加载bean的文件名列表,例如“ sample-testOneMorecontext.xml”和“ sample-
testcontext.xml”。


问题答案:

您为什么要完全做到这一点?我不确定上下文加载后内部实现是否会保留该信息的记录。但是,有一种方法可以知道从哪个 资源
加载了特定的bean。如果您有多个具有相同名称的bean定义,并且想知道哪个已“获胜”,那将很有用。

拿回您的示例(顺便说一句,您无需实现,ApplicationContextAware因为您正在自动装配它)

@ContextConfiguration
@ContextConfiguration("classpath:spring/sample-testcontext.xml")
public class SampleTest {

    @Autowired
    private ConfigurableApplicationContext context;

    @Test
    public void foo() {
        ConfigurableListableBeanFactory beanFactory = context.getBeanFactory();
        for (String beanName : context.getBeanDefinitionNames()) {
            System.out.println(beanName + " --> "+  beanFactory.getBeanDefinition(beanName).getResourceDescription());
        }
    }
}

这给你类似的东西(不包括默认实现可能会自动注册的内部后处理器Bean定义)

beanFirst --> class org.SampleTest$Config
beanSecond --> class path resource [foobar.xml]

beanFirst从测试的内部类(称为ConfigbeanSecond中加载了where,并从类foobar.xml路径的根目录中的文件中加载了。



 类似资料:
  • 我运行了一个简单的程序,它允许我将HTTP请求映射到一个函数——这很棒,所以我决定,与其简单地返回一个随机字符串,我还可以轻松地返回一个字符串格式的超文本标记语言页面,就像能够动态地提供静态超文本标记语言页面一样。 问题是我无法加载网页资源。 我的项目具有以下结构: 正如我所说,如果我只是想返回一个字符串,我的程序工作正常,它正在尝试加载我似乎无法管理的home.html文件,特别是我的问题是如何

  • 在我的play-scala应用程序中,我在webpack.config.js函数中运行一个命令 输出:{path:__dirname+'/public/compiled',文件名:'bundle.js'} 谢谢 错误内部服务器错误,针对(GET)[/assets/compiled/bundle.js]->

  • 我习惯于创建自定义的基于Spring Boot的库,每个库中有许多不同的bean。然后,一个目标Spring Boot应用程序将使用使这些bean的 从jar手动导入,然后默认情况下不会导入任何bean,我可以使用explicit导入所需内容。 这个库的包是而应用程序包是

  • 我想在不同的子目录中保存不同的css和js文件,这是我的目录结构 然后我尝试将所有这些文件导入到我的索引中。html文件(由“/”映射),但没有正确导入。我应该配置什么使Spring boot能够在“资源”下的所有子目录中递归搜索资源?另外,如果我还想将所有html模板放在子目录中,该怎么办?

  • 问题内容: 如何在Clojure程序中加载程序资源,例如图标,字符串,图形元素,脚本等?我使用的项目布局类似于许多Java项目中的布局,在Java项目中,“资源”目录挂在“源”目录上。一个jar文件是从源代码创建的,包括资源,但是我似乎无法像在Java中那样加载资源。 我尝试的第一件事是 但是永远找不到资源。 您可以使用类似的方法 其中name是要加载的资源的名称,而流是。 您可以尝试将上下文类加

  • 我正在努力从我的自定义库中自动生成bean,这是和Gradle一起导入的。读了几个类似的题目后,我仍然无法找到解决方法。 我有一个Spring Boot项目,它依赖于另一个项目(我的带有组件、存储库等的自定义库)。这个库是一个Spring不可运行的jar,主要由域实体和存储库组成。它没有可运行的Application.Class和任何属性... 错误: Com.MyProject.CustomLi