I have three bean definitions of the same class in context.xml:
<bean id="autowiredTargetBeanByName" autowire="byName"
class="spring.core.task.examples.AutowiredTargetBean" lazy-init="true"/>
<bean id="autowiredTargetBeanByType" autowire="byType"
class="spring.core.task.examples.AutowiredTargetBean" lazy-init="true"/>
<bean id="autowiredTargetBeanConstructor" autowire="constructor"
class="spring.core.task.examples.AutowiredTargetBean" lazy-init="true"/>
The AutowiredTargetBean class is:
public class AutowiredTargetBean {
private DependencyBean dependencyOne;
private DependencyBean dependencyTwo;
private AddDependencyBean addDependency;
public AutowiredTargetBean() {
System.out.println("Constructor without params");
}
public AutowiredTargetBean(DependencyBean dependencyTwo,
AddDependencyBean addDependency) {
this.dependencyTwo = dependencyTwo;
this.addDependency = addDependency;
System.out.println("Constructor with params autowiring");
}
public void setDependencyOne(DependencyBean dependencyOne) {
this.dependencyOne = dependencyOne;
}
public void setDependencyTwo(DependencyBean dependencyTwo) {
this.dependencyTwo = dependencyTwo;
}
public void setAddDependency(AddDependencyBean addDependency) {
this.addDependency = addDependency;
}
public DependencyBean getDependencyOne() {
return dependencyOne;
}
public DependencyBean getDependencyTwo() {
return dependencyTwo;
}
public AddDependencyBean getAddDependency() {
return addDependency;
}
@Override
public String toString() {
return "AutowiredTargetBean{" +
"dependencyOne=" + dependencyOne +
", dependencyTwo=" + dependencyTwo +
", addDependency=" + addDependency +
'}';
}
}
Main function contains:
System.out.println("\nByName autowiring: ");
targetBean = (AutowiredTargetBean) context.getBean("autowiredTargetBeanByName");
System.out.println(targetBean);
System.out.println("\nByType autowiring: ");
targetBean = (AutowiredTargetBean) context.getBean("autowiredTargetBeanByType");
System.out.println(targetBean);
System.out.println("\nConstructor autowiring: ");
targetBean = (AutowiredTargetBean) context.getBean("autowiredTargetBeanConstructor");
System.out.println(targetBean);
Output:
ByName autowiring:
Constructor without params
AutowiredTargetBean{dependencyOne=null, dependencyTwo=null, addDependency=null}
ByType autowiring:
Constructor without params
AutowiredTargetBean{dependencyOne=spring.core.task.pojo.DependencyBean@54107f42, dependencyTwo=spring.core.task.pojo.DependencyBean@54107f42, addDependency=spring.core.task.pojo.AddDependencyBean@1b11ef33}
Constructor autowiring:
Constructor with params autowiring
AutowiredTargetBean{dependencyOne=null, dependencyTwo=spring.core.task.pojo.DependencyBean@54107f42, addDependency=spring.core.task.pojo.AddDependencyBean@1b11ef33}
Attribute autowire in the bean tag is working successfully. I mean, after launching my spring application I get three differently initialized beans. How can I replace this on Spring Java configuration using @Configuration and other Spring core annotations (such as @Autowire, @Qualifier, @Lazy, and others)?