Depends-on in Spring

With this example we will show you how depends-on works in Spring.
In spring application XML, if we need to initialize any bean before another bean, depends-on does this job. While creating bean we need to define depends-on attribute in bean.
When a bean is typically dependent on another bean then we specify the dependent bean using <ref/> element in XML-based configuration metadata. However, sometimes dependencies between beans are less direct; for example, a static initializer that initializes something like loading of database driver in a class needs to be triggered first. The depends-on attribute can explicitly force one or more beans to be initialized before the bean using this element is initialized.

If you already have an idea on how to create a maven project in Eclipse will be great otherwise I will tell you here how to create a maven project in Eclipse.
The following things are required in order to run the application
Eclipse Kepler
JDK 1.8
Have maven 3 installed and configured
Spring dependencies in pom.xml
Now we will see the below steps how to create a maven based spring project in Eclipse
Step 1. Create a standalone maven project in Eclipse

Go to File -> New -> Other. On popup window under Maven select Maven Project. Then click on Next. Select the workspace location – either default or browse the location. Click on Next. Now in next window select the row as highlighted from the below list of archtypes and click on Next button.

Now enter the required fields (Group Id, Artifact Id) as shown below
Group Id : com.roytuts
Artifact Id : spring-depends-on
Step 2. Modify the pom.xml file as shown below.

<project xmlns="" xmlns:xsi=""
        <!-- Spring framework -->
        <!-- junit -->

Step 3. If you see JRE System Library[J2SE-1.4] then change the version by below process

Do right-click on the project and go to Build -> Configure build path, under Libraries tab click on JRE System Library[J2SE-1.4], click on Edit button and select the appropriate jdk 1.8 from the next window. Click on Finish then Ok.

Step 4. Create src/main/resources folder for putting the resource files.

Do right-click on the project and go New -> Source Folder. Give Folder name: as src/main/resources and click on Finish button.

Step 5. Create an XML properties file under src/main/resources.

Do right-click on src/main/resources in the project and go New -> file. Give File name: as applicationContext.xml and click on Finish button.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns=""
    <!-- A bean depends on single bean -->
    <!-- <bean id="beanA" class="com.roytutc.spring.dependson.BeanA"
        depends-on="beanB" />
    <bean id="beanB" class="com.roytutc.spring.dependson.BeanB" /> -->
    <!-- A bean depends on multiple beans -->
    <bean id="beanA" class="com.roytutc.spring.dependson.BeanA" depends-on="beanB, beanC">
        <property name="beanB" ref="beanB" />
    <bean id="beanB" class="com.roytutc.spring.dependson.BeanB" />
    <bean id="beanC" class="com.roytutc.spring.dependson.BeanC" />

Step 6. Create a POJO classes

package com.roytutc.spring.dependson;
public class BeanA {
    private BeanB beanB;
    public BeanA() {
        System.out.println("Initializing BeanA");
    public BeanB getBeanB() {
        return beanB;
    public void setBeanB(BeanB beanB) {
        this.beanB = beanB;
package com.roytutc.spring.dependson;
public class BeanB {
    private String name;
    public BeanB() {
        System.out.println("BeanB is initialized.");
    public String getName() {
        return name;
    public void setName(String name) { = name;
package com.roytutc.spring.dependson;
public class BeanC {
    public BeanC() {
        System.out.println("BeanC is initialized.");

Step 7. Create a Test class which will test our code how it works

package com.roytutc.spring.dependson;
import org.junit.Before;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
public class BeanATest {
    private BeanA beanA;
    private BeanB beanB;
    public void setUp() {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext(
        beanA = applicationContext.getBean("beanA", BeanA.class);
        beanB = applicationContext.getBean("beanB", BeanB.class);
    public void testGetName() {

Step 8. Run the above test class, you will get below output

BeanB is initialized.
BeanC is initialized.
Initializing BeanA

That’s all. Thanks for reading.

Related posts

Leave a Comment