ovod
ovod

Reputation: 1178

spring injection without constructor and setter

I have the question. If my class has dependency like:

public class Test {
   public Depend depend;

   //Here methods
}

And it does not have setter for Depend property or constructor with Depend as argument, and it has no annotation for Spring but has xml config like:

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

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

Is it possible to inject Depend into Test using such config (actually his config does not work. I just wonder - can I change smth to make it work not using annotations or setter/constructor)?

Upvotes: 0

Views: 3685

Answers (2)

muttonUp
muttonUp

Reputation: 6717

Yes it is possible without annotations, but you would need to create a TestBeanFactory and then create an object of Test and set Depend yourself before returning it.

<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>

Then your test factory would look something like this.

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;
    }
}

Upvotes: 2

Keith
Keith

Reputation: 3151

It is not possible without using annotations.

Your current configuration needs some simple changes to make this work. Annotate the depend field with @Autowired and enable component scanning.

Here's a detailed explanation: http://www.mkyong.com/spring/spring-auto-scanning-components/

Upvotes: 1

Related Questions