java – Spring:如何确保一个类仅由spring实例化,而不是由new n
是否有可能确保只有
spring可以实例化一个类,而不是在编译时使用关键字new? (避免意外实例化)
谢谢! 解决方法
如果要在编译时检测它,构造函数必须是非公共的.
私有可能过于严格(它使代码分析工具假设它永远不会被调用,甚至可能在某些IDE中引起警告),我会说默认(没有修饰符,包受保护)最好.如果你想在其他包中允许子类(但是如果不允许直接从该子类调用构造函数那是不可能的),你可以使它受到保护. 确保适当地注释构造函数,因此任何读取代码的人都清楚构造函数是这样的. Spring会毫无问题地调用这个非公共构造函数(自Spring 1.1,SPR-174起). 如果这不允许任何其他东西调用你的构造函数的问题,强迫一个类的每个用户使用Spring依赖注入的想法(所以这个问题的整个目标)是一个好主意或不是,虽然是完全不同的事情. 如果这是在库/框架中(通常只与Spring一起使用),限制它的使用方式可能不是一个好主意.但是,如果你知道的类只会用在已经强制使用Spring的已关闭项目中,那么它确实可能有意义. 或者,如果您的真正目标只是为了避免某人创建实例而不是使用其依赖项初始化它的可能性,那么您可以使用构造函数依赖项注入. 如果你的目标只是为了防止意外使用构造函数(开发人员不知道该类应该由Spring初始化),但不想完全限制可能性,你可以将其设为私有但也可以添加静态工厂方法(使用显式名称,如createManuallyInitializedInstance或类似的东西). 不好的想法:另一种可能的替代方法是使构造函数公开可用,但弃用它.这样它仍然可以使用(不使用像反射这样的黑客),但任何意外使用都会发出警告.但这并不是很干净:这不是贬值的意思. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |