Below are the code snippets:
- 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());
}
}
}
- 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());
}
}
}
- 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();
}
- Spring Configuration:
<context:component-scan base-package="springautowire.test" />
<bean id="demo" class="springautowire.test.Demo">
</bean>
- 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?