Spring 对成员变量使用protected而不是private

Spring 对成员变量使用protected而不是private,spring,spring-batch,Spring,Spring Batch,我总是遇到私有变量声明的问题。 例如FlatFileItemWrite。我想扩展这些类并覆盖'doRead'方法。这将不起作用,因为某些使用的变量被声明为私有的。这导致在自己的类中复制完整的代码以覆盖一个方法 有时甚至这也不起作用,因为该类扩展了另一个类,该类的变量声明仅对同一个包可见。然后你也需要复制这个类 然后,我将错过新版本的原始类中的更新。那么使用protected不是更好吗 我只能想象使用私有而不是受保护的极少数原因。对于我自己的程序,这不是一个问题,我可以根据需要更改它。但对于一个框

我总是遇到私有变量声明的问题。 例如FlatFileItemWrite。我想扩展这些类并覆盖'doRead'方法。这将不起作用,因为某些使用的变量被声明为私有的。这导致在自己的类中复制完整的代码以覆盖一个方法

有时甚至这也不起作用,因为该类扩展了另一个类,该类的变量声明仅对同一个包可见。然后你也需要复制这个类

然后,我将错过新版本的原始类中的更新。那么使用protected不是更好吗

我只能想象使用私有而不是受保护的极少数原因。对于我自己的程序,这不是一个问题,我可以根据需要更改它。但对于一个框架来说,这是一种痛苦

致以亲切的问候


Torsten

如果框架背后的想法是覆盖或扩展这些方法,那么它们应该被写成是公共的。(如果框架不将这些方法或属性作为公共提供,请小心,因为这可能取决于它们以特定的方式工作。这可能是我能想到的它们是私有的主要原因。其次是它们在该类之外并不重要。)


在某些情况下,您可能不需要复制整个类,但简单地继承或扩展它就足够了。

如果在Spring框架(或任何框架)中声明了某个私有的
,则它不被视为公共API的一部分。正因为如此,你真的不应该指望直接使用它。这样做真的意味着你正在改变框架,冒着无法无缝升级的风险


作为Spring Batch的项目负责人,我很想听听您如何使用FlatFileItemWriter,它要求您更改标记为私有的内容。

我还希望扩展某些ItemReaders/ItemWriter,以支持I/o上的解密/加密。例如,为了从资源中读取加密流,我想扩展StatexEventReaders TaxeEventReader,但FragmentEventReader是私有的,因此我无法将其XMLEventReader的InputStream封装在解密程序中。
我在FlatFileItemWriter上也遇到了同样的问题。

对不起,我是说FlatFileItemReader。在这里,我想覆盖标记为protected的'doRead'方法,以便在读取时跳过空行(仅包含空格字符或分隔符的行)。但是,由于变量lineCount是私有的,我不能这样做。我必须了解更多关于您的输入的信息,以便更好地指导您,但我猜想您描述的功能将是过滤,这将在
项目处理器中完成。另一个选项是实现一个自定义的
RecordSeparatorPolicy
,其中包括前一条记录中的空行。最后,可能有很多方法可以解决您所需的功能,而不必更改这些功能以获得保护。如果它确实需要保护,我会要求您提交一个Jira请求,在这里进一步讨论:谢谢,我将在Jira中提出一个请求,并对其进行更详细的解释。是的,我想扩展该类并覆盖一个受保护的方法。但这种方法使用的变量是私有的。这似乎应该是一个注释而不是答案。我没有在原始帖子上发表评论的信誉点。你可能可以在自定义
org.springframework.core.io.Resource
实现中进行解密。是的,这就是我现在追求的途径。谢谢