我有4个带有私有构造函数的单例类,我试图为所有4个类创建bean属性。
请在下面找到getInstance方法、私有构造函数和bean id声明。这在所有四个bean声明中都是相同的
但是如果我将构造函数从“private”更改为“public”,那么我就不会得到错误。有人能解释一下正在发生的事情吗?因为其他三个类都有私有构造函数,而且它们工作得非常好
getInstance()方法
public static ApplicationConfiguration getInstance() throws IOException,
IllegalArgumentException, InconsistentDataException {
ApplicationConfiguration result = instance.get();
if (result == null) {
try {
// Check again if already created
result = instance.get();
if (result == null) {
result = new ApplicationConfiguration();
}
} finally {
// something here
}
}
return result;
}
private ApplicationConfiguration() throws Exception {
// call a method here
}
<bean id="configManager" class="com.manager.ApplicationConfiguration" factory-method="getInstance" />
<bean id="configEnricher" class="com.enricher.ApplicationConfiguration" factory-method="getInstance" />
<bean id="configBussiness" class="com.validationservice.ApplicationConfiguration" factory-method="getInstance" />
<bean id="configEviction" class="com.evictionservice.ApplicationConfiguration" factory-method="getInstance" />
[#|2012-08-07 11:53:21,130|ERROR|RMI TCP Connection(226)-172.18.36.14|org.springframework.
web.context.ContextLoader||slodev-rhngp5.mblox.com|core-1|Context initialization failed|#]
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'co
nfigEviction' defined in ServletContext resource [/WEB-INF/camel-context.xml]: Initializat
ion of bean failed; nested exception is org.springframework.aop.framework.AopConfigExcepti
on: Could not generate CGLIB subclass of class [class com.evictionservice.ApplicationConfiguration]:
Common causes of this problem include using
a final class or a non-visible class; nested exception is java.lang.IllegalArgumentExcepti
on: No visible constructors in class com.evictionservice.ApplicationConfiguration
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.do
CreateBean(AbstractAutowireCapableBeanFactory.java:526)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.cr
eateBean(AbstractAutowireCapableBeanFactory.java:455)
at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(Abstr
actBeanFactory.java:293)
at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingl
eton(DefaultSingletonBeanRegistry.java:222)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(Abstrac
tBeanFactory.java:290)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractB
eanFactory.java:192)
at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstant
iateSingletons(DefaultListableBeanFactory.java:585)
at org.springframework.context.support.AbstractApplicationContext.finishBeanFactor
yInitialization(AbstractApplicationContext.java:895)
at org.springframework.context.support.AbstractApplicationContext.refresh(Abstract
ApplicationContext.java:425)
:
问题不在于bean创建本身(正如您已经注意到的,这与其他bean没有什么不同)。这个问题似乎与您试图使用的某些AOP配置有关。如果您想为该类创建代理,它不能用CGLIB来完成,因为该类不能被子类化(因为它有一个私有构造函数)。
解决这个问题的唯一方法(给定当前的设计)是创建一个将由ApplicationConfiguration类实现的接口,然后为该接口创建代理,而不是代理该类。
我对JAVA web应用程序非常陌生,所以请记住这一点。我承担了一个非常大的项目,令人望而生畏。我终于修复了Maven依赖,现在在Tomcat上运行时遇到了第一个错误。 包含eu.digient.billfold.goshgame.game.level.ItemConfigFactoryImpl模块的Spring配置:
问题内容: 我正在使用Jackson来将json数组反序列化为某些对象。这是我的课: 错误: 我一直在使用GSON,但由于性能问题需要放弃它。当我切换到Jackson时,我只是向所有类添加了默认构造函数,这可能是不必要的,因为没有定义其他构造函数… 编辑: 哦,JSON看起来像这样: 问题答案: 我没有与Jackson一起工作,但我想问题是Business类是成员类而不是静态的。 杰克逊需要做的是
问题内容: 我正在为这个错误而苦苦挣扎: 08-08 11:42:53.179:E / AndroidRuntime(20288):由以下原因引起:java.lang.InstantiationException:无法实例化com.example.localnotificationtest.ReminderService类;没有空的构造函数 我不明白为什么会发生此错误。 我试图在特定时间显示通知,
我试图理解为什么在谈到构造函数时,类成员的可访问性之间存在差异。 考虑下面的例子: 的私有成员作为私有成员,不应从访问。对于字段和方法,情况确实如此,但构造函数似乎没有遵循相同的规则。 从JLS-8(6.6.1.确定可访问性)中,我们可以阅读: [...] 引用类型的成员(类、接口、字段或方法)或类类型的构造函数只有在类型可访问且声明该成员或构造函数允许访问时才可访问: > [……] 否则,成员或
问题内容: 在春季,bean的类可能没有公共构造函数,而只有私有构造函数吗?创建bean时会调用此私有构造函数吗?谢谢。 问题答案: 是的,Spring可以调用私有构造函数。如果找到具有正确参数的构造函数,无论可见性如何,它将使用反射将其构造函数设置为可访问的。
问题内容: 我需要创建一个没有构造函数参数的不完整对象。像这样 我希望这个Bean是Spring管理的,以便以后可以使用Spring AOP。 但是我的bean需要将超时作为动态值传递-是否有一种方法可以创建在构造函数中注入了动态值的spring托管bean? 问题答案: 有一个方法,根据javadoc,它允许您指定构造函数参数,该参数用于覆盖bean定义自己的参数。因此,您可以在bean文件中放