【问题标题】:Spring java config to invoke a public non static method of a singleton class with private constructorSpring java config调用带有私有构造函数的单例类的公共非静态方法
【发布时间】:2021-03-25 09:39:02
【问题描述】:

我正在将一个 spring 项目更改为 springboot 并从 xml 更改为 java config。 我有一个带有私有构造函数的单例类,在原始 xml 中,非静态方法被这样调用:

<bean id="myClassBeanId" class="com.myproject.dao.MyClass">

<bean id="daoservice" factory-bean="myClassBeanId" factory-method="createMyStaticVariable">

目标是以某种方式调用具有私有构造函数的类的“公共非静态方法”,以在spring java config中初始化同一类的静态变量。 有人可以告诉 java config 等效于上述 xml 配置。

【问题讨论】:

    标签: java spring-boot spring-framework-beans


    【解决方案1】:
    @Bean
    public MyClass myClass() {
    MyClass.class.getConstructror().makeAccessable () ;
    return MyClass.class.getConstructror().invoke() :
    } 
    @Bean
    public DaoService daoService(MyClass myClassBeanId) {
    return myClassBeanId.createMyStaticVariable():
    } 
    

    【讨论】:

    • 感谢您提供等效代码,但是,运行此代码会出现异常:没有 'com.myproject.dao.MyClass' 类型的合格 bean。由于 MyClass 有一个私有构造函数,不知道如何定义 'MyClass myClassBeanId' bean。能否请您提供进一步的帮助。
    • 您必须先调用makeAccessable,通过反射调用私有构造函数。我已经添加了伪代码。我认为这就是 xml 配置处理器在内部所做的。
    • 再次感谢。暂时通过添加 MyClass 的静态变量并添加 getInstance 方法来返回它来使其工作。一直在尝试反射,但到目前为止没有运气,一旦反射也起作用,就会更新。不确定这两种方法是否比另一种更有优势。
    猜你喜欢
    • 1970-01-01
    • 2015-07-19
    • 1970-01-01
    • 2021-03-16
    • 2020-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多