SCOPE_SINGLETON和私有构造函数之间的区别

时间:2019-09-25 14:34:01

标签: java spring

SCOPE_SINGLETON与私有构造函数有什么区别? 用SCOPE_SINGLETON初始化任何类之后,我也可以创建对象。

错误:-

  

由以下原因引起:org.springframework.aop.framework.AopConfigException:无法生成类实用程序的CGLIB子类:导致此问题的常见原因包括使用final类或非可见类;例如,使用final类或不可见类。嵌套异常是java.lang.IllegalArgumentException:类实用程序中没有可见的构造函数

首先,我想澄清一下,我不是在使用新运算符来制作对象。我用@Component和私有构造函数。工作正常。但是当我将Grab升级到4.1时,将sb 1.5升级到sb2.0。声纳开始给我这个错误。然后我删除了私有构造函数并添加了scope_singleton。它为我工作。甚至我删除了@Component并在我的私有const中添加了throw。有效。这就是为什么我问,b / w scope_singleton和private构造函数有什么区别。

工作代码:

@Component
@Scope(value = ConfigurableBeanFactory.SCOPE_SINGLETON)
public class utility1 {
}

错误代码:

@Component
public class utility2 {
    private utility2() {
    }
}

2 个答案:

答案 0 :(得分:0)

Spring是这里的框架,您将专注于去离子注入的一部分。 默认情况下,Spring中的组件是单例,您无需指定它是scope_singleton。 Spring确实对其组件有要求,其中之一就是要有一个可见的构造函数(否则,spring不能创建它们,因此创建一个公共构造函数应该对您有用)。 对于Spring来说,这将是Singleton,因为Spring将仅管理一个实例,但是使用new可以创建任意数量的实例(我想这不是一个好主意)

答案 1 :(得分:-1)

如果您使用的是Spring框架,则不应尝试使用new运算符或其他方式创建带注释的类。只有Spring核心才应该负责bean类的创建,只有在这种情况下,您才能确定您的类确实是单例等。