最近,我在尝试清理我的spring配置时遇到了一个非常令人困惑的错误。这个例外是从第三方图书馆内部引起的,基本上是一个混淆的NPE。根据需要标记第三方类属性(Java/Spring)
我希望能够做到的是配置spring来要求这个类上的特定字段是必需的,但我不想构建库的自定义版本。
一个明显的解决方案是在那里继承和标记setter,但出于好奇,我想知道是否有一种简单的方法可以在春季做到这一点,而无需做班级杂耍。
Java 6u10,Spring 2.5。
最近,我在尝试清理我的spring配置时遇到了一个非常令人困惑的错误。这个例外是从第三方图书馆内部引起的,基本上是一个混淆的NPE。根据需要标记第三方类属性(Java/Spring)
我希望能够做到的是配置spring来要求这个类上的特定字段是必需的,但我不想构建库的自定义版本。
一个明显的解决方案是在那里继承和标记setter,但出于好奇,我想知道是否有一种简单的方法可以在春季做到这一点,而无需做班级杂耍。
Java 6u10,Spring 2.5。
为您的对象写一个FactoryBean。子类化不是必需的。
更新(基于评论/问题澄清)
我终于明白你现在要做的:-)没有在春季任何你想要什么,会做什么,但它是相当微不足道来写。基本上,您正在考虑扩展org.springframework.beans.factory.annotation.RequiredAnnotationBeanPostProcessor
,不同之处在于您要静态指定bean类/方法名称,而不是依赖注释。您需要覆盖isRequiredProperty()
方法。
也许我错过了一些东西,但我不太明白这会有什么帮助。具体来说,我问的是向特定方法添加@Required,而不是将字段初始化为特定值。我不明白如何编写一个工厂将让我定义方法的元数据。 – liam 2009-10-08 21:56:44
@Required不是确保设置特定属性的唯一方法;您可以在初始化回调中手动执行此操作,您可以从FactoryBean或通过子类化获得,也可以按照Gandalf的建议实施InitializingBean。或者你可以用@Required在FactoryBean上注释相应的setter。 – ChssPly76 2009-10-08 22:10:18
我明白我可以手动测试字段,我真的没有看到编写工厂的好处,或者让一个构造函数完成工作而不是简单的子类。理想情况下,我找的,我可以成立一个部分我春天CONFIGS其中一种方式: - 我给一个完全合格的类名和方法模式的列表 弹簧施加相同的逻辑,并打印了同样的错误因为使用@Required。 如果我发现我的应用程序需要的类的其他属性,我可以添加它们来执行启动检查。 我猜测没有。不过谢谢你的建议。 – liam 2009-10-08 22:29:02
说明:我正在尝试将@Required注释添加到我无权访问的特定setter,而不是注入特定的依赖项。这是类元数据的问题,而不是初始化。 – liam 2009-10-08 21:53:11
@liam - 我明白你现在想要什么,出于某种原因,你提到的子类把我抛弃了。请参阅我的答案中的更新。 – ChssPly76 2009-10-08 22:54:14