如何在jar文件中获取所有Spring bean名称?

时间:2016-12-26 08:24:55

标签: java spring jar

我有一个jar文件,其中定义了一些Spring bean。我的问题是这个jar文件的1. FROM table-name // Scan all the tuples [rows] in this table 2. WHERE column-name = '123' // Extract those rows that satisfies some selection criteria, and ignore the rest 3. SELECT * // Include ALL the columns in the tuple in the result set [Asterisk is like a wild-card] 对象,如何从中获取所有Spring bean名称?或者是否有 <link rel="stylesheet" type="text/css" href="{{url('assets/css/bootstrap.min.css')}}"/> 作为参数的Spring官方api来获取<script src="{{url('assets/js/components/bootstrap.js')}}"></script> 的实例?如果答案是肯定的,那么我可以使用InputStream来获取bean名称。

提前致谢。

2 个答案:

答案 0 :(得分:0)

我可以添加答案,曾经在同一案例中帮助过我。
您还可以使用JarInputStream [查看链接的文档]

这是一个例子,我希望它可以帮助你。

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

void someMethodName(InputStream jarFile) {
JarInputStream jarInputStream = null;
try {
    jarInputStream = new JarInputStream(jarFile);
    JarEntry je;
    while((je=jarInputStream.getNextJarEntry())!=null){
                 //gives fully qualified name of classes inside jar
                 System.out.println(je.getName());
    }catch (IOException e) {
           e.printStackTrace();
    }}

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

答案 1 :(得分:0)

你可以知道在特定jar中声明的所有bean,为此你必须将jar / war中定义的spring beans配置文件名传递给ApplicationContext。您可以通过在双引号中传递配置文件名来传递任意数量的配置文件。逗号分隔如下:

    ApplicationContext appCon = new ClassPathXmlApplicationContext("parentConfig.xml","springConfig.xml");

考虑到弹簧配置文件“springConfig.xml”是在jar / war&amp;中定义的。 “parentConfig.xml”文件是当前项目中定义的实际弹簧配置文件。

你是对的,你可以使用getBeanDefinitionNames()

获取所有声明的bean
List<String> beansList = Arrays.asList(appCon.getBeanDefinitionNames());

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

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