In Spring Autowiring by AutoDetect means If a default constructor is found, uses “constructor“; Otherwise, uses “byType“. In this case, since there is a default constructor in “Circle” class, so, Spring auto wired it via constructor method – “public Circle(Point center)”.
You can enable this feature via autowire=”autodetect” like below :
With autowire by autodetect enabled, you do not need to declares the property tag anymore.
<bean autowire="autodetect" class="com.dineshonjava.sdnext.autoWiring.tutorial.Circle" id="circle"> </bean> <bean class="com.dineshonjava.sdnext.autoWiring.tutorial.Point" id="center"> <property name="x" value="0"></property> <property name="y" value="0"></property> </bean>
Popular Tutorials
Circle.java
package com.dineshonjava.sdnext.autoWiring.tutorial; public class Circle { private Point center; /** * USING CONSTRUCTOR * @param center the center to set * autowiring by constructor */ public Center(Point center) { this.center = center; } /** * USING SETTER * @param center the center to set * autowiring by type */ public setCenter(Point center) { this.center = center; } public void draw() { System.out.println("Center of circle is ("+center.getX()+", "+center.getY()+")"); } }
Circle.java
package com.dineshonjava.sdnext.autoWiring.tutorial; public class Circle { private Point center; /** * USING SETTER ONLY * @param center the center to set * autowiring by type */ public setCenter(Point center) { this.center = center; } public void draw() { System.out.println("Center of circle is ("+center.getX()+", "+center.getY()+")"); } }
Point.java
package com.dineshonjava.sdnext.autoWiring.tutorial; public class Point { private int x; private int y; /** * @return the x */ public int getX() { return x; } /** * @param x the x to set */ public void setX(int x) { this.x = x; } /** * @return the y */ public int getY() { return y; } /** * @param y the y to set */ public void setY(int y) { this.y = y; } }
spring.xml
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemalocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd"> <bean autowire="constructor" class="com.dineshonjava.sdnext.autoWiring.tutorial.Circle" id="circle"> </bean> <bean class="com.dineshonjava.sdnext.autoWiring.tutorial.Point" id="center"> <property name="x" value="0"></property> <property name="y" value="0"></property> </bean> </beans>
DrawingApp.java
package com.dineshonjava.sdnext.autoWiring.tutorial; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * @author Dinesh Rajput * */ public class DrawingApp { /** * @param args */ public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml"); Circle circle = (Circle) context.getBean("circle"); circle.draw(); } }
Now run this application and get following output on the console.
Center of Circle is (0, 0)
Spring Related Topics you may like
Strategy Design Patterns We can easily create a strategy design pattern using lambda. To implement…
Decorator Pattern A decorator pattern allows a user to add new functionality to an existing…
Delegating pattern In software engineering, the delegation pattern is an object-oriented design pattern that allows…
Technology has emerged a lot in the last decade, and now we have artificial intelligence;…
Managing a database is becoming increasingly complex now due to the vast amount of data…
Overview In this article, we will explore Spring Scheduler how we could use it by…