-1

我有一个生成一些 PDF 发票的类层次结构。基本上所有类都实现了一个接口,该接口具有生成发票所需的所有方法。
问题是需要实例化的具体类是在运行时确定的,因为每个客户端的类名都存储在数据库中。
现在我有这样的东西:

    String pdfProcessorClass = "PdfParserXXX";
    pdfProcessorClass = pdfProcessorClass.trim();
    Invoic2Pdf pdfGenerator;
    try {
            Class<?> forName = Class.forName(pdfProcessorClass);
            pdfGenerator= (Invoic2Pdf) forName.newInstance();
            pdfGenerator.init(xXx, yYy);

        } catch (Exception e) {
          //deal with exception
        }

考虑到这些需要动态创建的类本身就是spring bean,是否有可能使用Spring IoC以更优雅的方式实现这一目标?

4

1 回答 1

1

Spring 的IoC特性大多来自于BeanFactory接口。

这个接口和它的任何实现(AFAIK)都没有任何从 String 类名创建 bean 的方法。所以无论如何你都必须解析并使用Class.forName(String)来获取Class实例。

拥有该类后,您可以使用 Spring 创建 bean。

Class<?> forName = Class.forName(pdfProcessorClass);
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("yourContext.xml");
pdfGenerator = context.getBeanFactory().createBean(forName);

或者重载的createBean()方法。在这里查看详细信息。

于 2013-08-30T19:54:23.023 回答