Spring CustomAutowireConfigurer Example

By Arvind Rai, October 23, 2021
On this page we will provide Spring CustomAutowireConfigurer example. The CustomAutowireConfigurer is the implementation of BeanFactoryPostProcessor. The CustomAutowireConfigurer is used to create custom qualifier. The Qualifier is used to resolve conflicts of dependency injection where more than one beans are eligible for autowiring. We can create custom qualifier in two ways.

1. Using @Qualifier annotation.
2. Using CustomAutowireConfigurer

Here on this page, we will provide a complete example of CustomAutowireConfigurer.

Create Custom Qualifier Annotation

We are creating two custom qualifiers without any method.
DeerQualifier.java
package com.concretepage.qualifier;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.METHOD,
        ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface DeerQualifier {
} 
FoxQualifier.java
package com.concretepage.qualifier;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target({ElementType.FIELD, ElementType.METHOD,
        ElementType.TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
public @interface FoxQualifier {
} 

Configure CustomAutowireConfigurer in XML

Find the XML file to configure CustomAutowireConfigurer and we will also configure qualifier with our beans.
app-conf.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans 
           http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
           http://www.springframework.org/schema/context
           http://www.springframework.org/schema/context/spring-context-3.0.xsd">

		<context:annotation-config/>
		<bean id="customAutowireConfigurer" class="org.springframework.beans.factory.annotation.CustomAutowireConfigurer">
                   <property name="customQualifierTypes">
                     <set>
                       <value>com.concretepage.qualifier.FoxQualifier</value>
                       <value>com.concretepage.qualifier.DeerQualifier</value>
                     </set>
                   </property>
                </bean>
		<bean class="com.concretepage.bean.AnimalService"/>
		<bean class="com.concretepage.bean.Fox">
			<qualifier type="FoxQualifier"/>
		</bean>		
		<bean class="com.concretepage.bean.Deer">
			<qualifier type="DeerQualifier"/>
		</bean>
</beans> 

Create Beans

Find the classes which will configured as bean in XML.
Animal.java
package com.concretepage.bean;
public interface Animal {
	void printName();
} 
Deer.java
package com.concretepage.bean;
public class Deer implements Animal {
	@Override
	public void printName() {
		System.out.println("---  Deer  ---");
	}
} 
Fox.java
package com.concretepage.bean;
public class Fox implements Animal {
	@Override
	public void printName() {
		System.out.println("---  Fox  ---");
	}
} 
AnimalService.java
package com.concretepage.bean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.concretepage.qualifier.DeerQualifier;
@Service
public class AnimalService {
	@Autowired
	@DeerQualifier
	private Animal animal;
	public Animal getAnimal() {
		return animal;
	}
} 

Main Class to Test Application

Find the main class to test the application.
SpringDemo.java
package com.concretepage;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.concretepage.bean.AnimalService;
public class SpringDemo {
	public static void main(String[] args) {
		AbstractApplicationContext  context = new ClassPathXmlApplicationContext("app-conf.xml");
		AnimalService service = context.getBean(AnimalService.class);
		service.getAnimal().printName();
		context.close();
	}
} 
Find the output.
11:35:59.934 [main] DEBUG o.s.b.f.s.DefaultListableBeanFactory - Returning cached instance of singleton bean 'com.concretepage.bean.AnimalService#0'
---  Deer  ---
11:35:59.934 [main] INFO  o.s.c.s.ClassPathXmlApplicationContext - Closing org.springframework.context.support.ClassPathXmlApplicationContext@6a38e57f: startup date [Thu Jan 14 11:35:59 IST 2016]; root of context hierarchy 

Download Source Code

POSTED BY
ARVIND RAI
ARVIND RAI







©2024 concretepage.com | Privacy Policy | Contact Us