2009-10-08 62 views
0

最近,我在尝试清理我的spring配置时遇到了一个非常令人困惑的错误。这个例外是从第三方图书馆内部引起的,基本上是一个混淆的NPE。根据需要标记第三方类属性(Java/Spring)

我希望能够做到的是配置spring来要求这个类上的特定字段是必需的,但我不想构建库的自定义版本。

一个明显的解决方案是在那里继承和标记setter,但出于好奇,我想知道是否有一种简单的方法可以在春季做到这一点,而无需做班级杂耍。

Java 6u10,Spring 2.5。

+0

说明:我正在尝试将@Required注释添加到我无权访问的特定setter,而不是注入特定的依赖项。这是类元数据的问题,而不是初始化。 – liam 2009-10-08 21:53:11

+0

@liam - 我明白你现在想要什么,出于某种原因,你提到的子类把我抛弃了。请参阅我的答案中的更新。 – ChssPly76 2009-10-08 22:54:14

回答

2

为您的对象写一个FactoryBean。子类化不是必需的。

更新(基于评论/问题澄清)

我终于明白你现在要做的:-)没有在春季任何你想要什么,会做什么,但它是相当微不足道来写。基本上,您正在考虑扩展org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor,不同之处在于您要静态指定bean类/方法名称,而不是依赖注释。您需要覆盖isRequiredProperty()方法。

+0

也许我错过了一些东西,但我不太明白这会有什么帮助。具体来说,我问的是向特定方法添加@Required,而不是将字段初始化为特定值。我不明白如何编写一个工厂将让我定义方法的元数据。 – liam 2009-10-08 21:56:44

+0

@Required不是确保设置特定属性的唯一方法;您可以在初始化回调中手动执行此操作,您可以从FactoryBean或通过子类化获得,也可以按照Gandalf的建议实施InitializingBean。或者你可以用@Required在FactoryBean上注释相应的setter。 – ChssPly76 2009-10-08 22:10:18

+0

我明白我可以手动测试字段,我真的没有看到编写工厂的好处,或者让一个构造函数完成工作而不是简单的子类。理想情况下,我找的,我可以成立一个部分我春天CONFIGS其中一种方式: - 我给一个完全合格的类名和方法模式的列表 弹簧施加相同的逻辑,并打印了同样的错误因为使用@Required。 如果我发现我的应用程序需要的类的其他属性,我可以添加它们来执行启动检查。 我猜测没有。不过谢谢你的建议。 – liam 2009-10-08 22:29:02

1

我会写,扩展您的CURENT类并实现在春季InitalizingBean接口伟驰检查您指定的字段的类。

+0

子类,并标记方法为@Required就是我计划,我特别想知道是否有通过CONFIGS所需的标记方法/类的AOP风格的方式。 spring/hibernate允许你为事务定义切入点。 – liam 2009-10-08 22:08:26

+0

我正在与我最初的小琐事。一般情况下,我一直在寻找一种方式来纪念根据需要在不继承或编译的jar的定制版本的第三方制定者。还是)感谢你的建议。 – liam 2009-10-08 22:38:07