Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在jar文件中获取所有Springbean名称?_Java_Spring_Jar - Fatal编程技术网

Java 如何在jar文件中获取所有Springbean名称?

Java 如何在jar文件中获取所有Springbean名称?,java,spring,jar,Java,Spring,Jar,我有一个jar文件,其中定义了一些Springbean。我的问题是这个jar文件的InputStream对象,如何从中获取所有Springbean名称?或者是否有任何Spring官方api以InputStream作为参数来获取ApplicationContext的实例?如果答案是肯定的,那么我可以使用ApplicationContext.getBeanDefinitionNames()来获取bean名称 提前谢谢。我可以添加答案,这曾经在同样的情况下帮助过我。 您也可以使用[检查链接文档选项]

我有一个jar文件,其中定义了一些Springbean。我的问题是这个jar文件的
InputStream
对象,如何从中获取所有Springbean名称?或者是否有任何Spring官方api以
InputStream
作为参数来获取
ApplicationContext
的实例?如果答案是肯定的,那么我可以使用
ApplicationContext.getBeanDefinitionNames()
来获取bean名称


提前谢谢。

我可以添加答案,这曾经在同样的情况下帮助过我。
您也可以使用[检查链接文档选项]

这是一个例子,我希望它能帮助你

try {
           File file = new File("myJar.jar");
           FileInputStream fInput = new FileInputStream(file);
           JarInputStream jInput = new JarInputStream(fInput);
           //This class is used to represent a JAR file entry.
           JarEntry je;
           while((je=jInput.getNextJarEntry())!=null){
                 //gives fully qualified name of classes inside jar
                 System.out.println(je.getName());
           }
           jInput.close();
       } catch (IOException e) {
           e.printStackTrace();
       }

如果是InputStream:


不知道它是否有用,但我想我已经做过几次了,为什么不与你分享呢。如果有帮助,请告诉我。

您可以知道特定jar中声明的所有bean,要做到这一点,您必须将jar/war中定义的springbean配置文件名传递给ApplicationContext。通过以双引号和逗号分隔的形式传递配置文件名,可以传递任意数量的配置文件,如下所示:

    ApplicationContext appCon = new ClassPathXmlApplicationContext("parentConfig.xml","springConfig.xml");
考虑到spring配置文件“springConfig.xml”是在jar/war中定义的&“parentConfig.xml”文件是在当前项目中定义的实际spring配置文件

没错,可以使用getBeanDefinitionNames()声明所有bean

List beansList=Arrays.asList(appCon.getbeansdefinitionnames());
forEach(bean->System.out.println(bean));

上面的语句将打印jar/war文件中定义的所有bean,以及当前projectspring配置文件(“parentConfig.xml”)中声明的bean。

InputStream到.jar文件是什么意思?在某种机械装置中有吗?或者从普通文件/目录读取?…此jar文件是从网页上载的,
InputStream
对象是从spring controller类的处理程序方法中的
MultipartFile
类型的参数对象获得的。getBeanDefinitionNames返回此工厂中定义的所有bean的名称。我为两个场景编写的答案也将给出相同的输出,即bean定义名称。。请查收@沃尔什请看org.xeustechnologies.jcl.JarClassLoader。add和getLoadedClass方法可能很方便。您必须在类中查找Spring注释。@Turo我使用xml样式的配置:(目前,我想找到一个Spring官方api来解决这个问题。谢谢你的回复!但很抱歉我的错误描述。我需要的是获取jar文件中定义的所有Spring bean信息,而不是jar文件中的文件名。再次感谢!我编辑了我的答案。请检查InputStream。那么,所有Spring bean信息是什么意思选项???@walshI使用Spring framework并在该文件中定义了一些bean。getBeanDefinitionNames返回在此工厂中定义的所有bean的名称。我为两个场景编写的答案也将给出相同的输出,即bean定义名称。请检查。@walsh
    ApplicationContext appCon = new ClassPathXmlApplicationContext("parentConfig.xml","springConfig.xml");
List<String> beansList = Arrays.asList(appCon.getBeanDefinitionNames());

beansList.forEach(bean -> System.out.println(bean));