In Spring I'm able to access a bean declared in xml config via Autowiring Constructor but not via Autowiring property

Viewed 19

Below are the code snippets:

  1. First.java - Autowiring to property
@Component  
public class First {
    
    @Autowired
    private Demo demo;

    public Demo getDemo() {
        return demo;
    }

    public void setDemo(Demo demo) {
        this.demo = demo;
    }

    public First() {
        try {
            System.out.println("Printing Demo from Autowired property");
            System.out.println(this.getDemo().toString());
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
}
  1. Second.java - Autowiring to constructor
@Component
public class Second {
    
    @Autowired
    public Second(Demo demo) {
        try {
            System.out.println("Printing demo from constructor argument");
            System.out.println(demo.toString());
        } catch(Exception e) {
            System.out.println(e.getMessage());
        }
    }
    
}
  1. Main method
public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("appconfig.xml");
        
        System.out.println("Printing Demo from Runner");
        System.out.println(context.getBean(Demo.class));
        
        ((ConfigurableApplicationContext)context).close();
    } 
  1. Spring Configuration:
<context:component-scan base-package="springautowire.test" />
    
    <bean id="demo" class="springautowire.test.Demo">
    </bean>
  1. Output:
Printing Demo from Autowired property
null
Printing demo from constructor argument
springautowire.test.Demo@2cf3d63b
Printing Demo from Runner
springautowire.test.Demo@2cf3d63b

In Second.java - I'm able to get the required Object. But not sure why in First.java - I'm getting 'null'. Is there anything that I'm doing wrong?

0 Answers
Related