【问题标题】:spring injection without constructor and setter没有构造函数和设置器的弹簧注入
【发布时间】:2023-04-07 08:17:01
【问题描述】:

我有一个问题。如果我的班级有这样的依赖:

public class Test {
   public Depend depend;

   //Here methods
}

并且它没有Depend 属性或以 Depend 作为参数的构造函数设置器,并且它没有 Spring 的注释但具有 xml 配置如下:

<bean id="depend" class="xxx.Depend"></bean>

<bean id="test" class="xxx.Test">
   <property name="depend" ref="depend" />
</bean>

是否可以使用这样的配置将 Depend 注入到 Test 中(实际上他的配置不起作用。我只是想知道 - 我可以更改 smth 以使其不使用注释或设置器/构造器)?

【问题讨论】:

  • 如果您在将其作为问题发布之前对其进行测试会发生什么?
  • 我写了 - “这个配置不起作用”!!!我的问题是在课堂上“想知道”。我想知道:是否可以在没有设置器/构造器或注释的情况下使其工作。在python中你可以直接覆盖属性。
  • “实际上(t)他的配置不起作用”对我来说听起来像是“我测试过”......
  • 错误的结果就是答案。
  • @GoodBadandUgly 你说“它可能的”。真的吗?可以举个例子吗?

标签: java spring


【解决方案1】:

不使用注释是不可能的。

您当前的配置需要进行一些简单的更改才能使其正常工作。使用@Autowired 注释depend 字段并启用组件扫描。

这里有详细解释:http://www.mkyong.com/spring/spring-auto-scanning-components/

【讨论】:

  • OP 的问题不是为这种情况添加注释。
  • 是的——我想我应该明确地说“不,不可能,但你可以这样做......”
  • 请编辑您的帖子并添加该部分,以便将其转换为有效答案:)
  • 是的)我知道注释)
【解决方案2】:

是的,可以不使用注释,但是您需要创建一个 TestBeanFactory,然后创建一个 Test 对象并在返回之前自行设置 Depend。

<bean id="depend" class="xxx.Depend"></bean>
<bean id="testFactory" class="xxx.TestFactory">
    <property name="depend" ref="depend" />
</bean>

<bean id="test" factory-bean="testFactory" factory-method="createTest">
</bean>

那么你的测试工厂应该是这个样子。

public class TestFactory {
    private Depend depend;
    
    public setDepend(Depend depend) {
        this.depend = depend
    }

    public Test createTest() {
        Test test = new Test();
        test.depend = this.depend;
        return test;
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-08
    • 1970-01-01
    • 1970-01-01
    • 2021-04-01
    • 2022-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多