Spring 3 JavaConfig @Import example

Normally, you will split a large Spring XML bean files into multiple small files, group by module or category, to make things more maintainable and modular. For example,


<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<import resource="config/customer.xml"/>
        <import resource="config/scheduler.xml"/>
 
</beans>

In Spring3 JavaConfig, the equivalent functionality is @Import.


package com.mkyong.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import({ CustomerConfig.class, SchedulerConfig.class })
public class AppConfig {

}

@Import Example

See a full example of using JavaConfig @Import.

1. Directory Structure

Directory structure of this example.

directory structure of this example

2. Spring Beans

Two simple Spring beans.

File : CustomerBo.java


package com.mkyong.core;

public class CustomerBo {

	public void printMsg(String msg) {

		System.out.println("CustomerBo : " + msg);
	}

}

File : SchedulerBo.java


package com.mkyong.core;

public class SchedulerBo {

	public void printMsg(String msg) {

		System.out.println("SchedulerBo : " + msg);
	}

}

3. @Configuration example

Now, use JavaConfig @Configuration to declare above beans.

File : CustomerConfig.java


package com.mkyong.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.mkyong.core.CustomerBo;

@Configuration
public class CustomerConfig {
	
	@Bean(name="customer")
	public CustomerBo customerBo(){
		
		return new CustomerBo();
		
	}
}

File : SchedulerConfig.java


package com.mkyong.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.mkyong.core.SchedulerBo;

@Configuration
public class SchedulerConfig {
	
	@Bean(name="scheduler")
	public SchedulerBo suchedulerBo(){
		
		return new SchedulerBo();
		
	}
	
}

4. @Import example

Use @Import to load multiple configuration files.

File : AppConfig.java


package com.mkyong.config;

import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import({ CustomerConfig.class, SchedulerConfig.class })
public class AppConfig {

}

5. Run it

Load the main configuration file , and test it.


package com.mkyong.core;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.mkyong.config.AppConfig;

public class App {
	public static void main(String[] args) {

		ApplicationContext context = new AnnotationConfigApplicationContext(
				AppConfig.class);

		CustomerBo customer = (CustomerBo) context.getBean("customer");
		customer.printMsg("Hello 1");

		SchedulerBo scheduler = (SchedulerBo) context.getBean("scheduler");
		scheduler.printMsg("Hello 2");

	}
}

Output


CustomerBo : Hello 1
SchedulerBo : Hello 2

Download Source Code

Download It – Spring3-JavaConfig-Import-Example.zip (7 KB)

References

  1. Spring3 @Configuration example
  2. Spring XML import example

About the Author

author image
mkyong
Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter, or befriend him on Facebook or Google Plus. If you like my tutorials, consider make a donation to these charities.

Comments

Leave a Reply

avatar
newest oldest most voted
Joe
Guest
Joe

Can we use exception handler in XML ?

http://goo.gl/P2XEv8

Sourav Chakraborty
Guest
Sourav Chakraborty

Exception in thread “main” java.lang.ClassCastException: com.config.SchedulerConfig cannot be cast to com.core.SchedulerBo- I m getting this error.. Plz help

shareef
Guest
shareef

i did not face any problem if you post your code on git hub or you can see mine https://github.com/shareefhiasat/mkyong

zs
Guest
zs

it’s simple and useful.

way2shopper
Guest
way2shopper

http://www.way2shopper.com get best deals and coupon code

trackback
Um mundo Java sem XML | Blog da Concrete

[…] “ComponentScan” define a partir de qual pacote o Spring irá procurar beans e a anotação “Import” diz outras classes de configuração que serão necessárias para a aplicação (Não entrarei […]

Levan
Guest
Levan

Thanks!

RaviCKota
Guest
RaviCKota

It seems we can also extend the classes annotated with @Configuration.

I tried something like

@Configuration
public class ParentConfig{
@Bean(name=”a”)
public A getA(){…}
}

@Configuration
public class ChildConfig extends ParentConfig{
@Bean(name =”b”)
public B getB(){….}
}

ApplicationContext ctx = new AnnotationConfigApplicationContext(ChildConfig.class);

ctx.getBean(“a”) returns object of type “A”

So more or less some thing like include vs import

trackback
Spring Tutorial

[…] 3 JavaConfig example Demonstrate the use of @Configuration and @Bean to define bean in SpringSpring 3 JavaConfig @Import example Demonstrate the use of @Import to organize beans in modular.Spring Dependency Injection (DI)How […]

Zakos
Guest
Zakos

So define 1 file AppConfig.java which will configure every needed bean instead of bean_nameConfig.java for each bean ( 1 main config file instead many )

OR

each needed class as bean will have his configFile like in the example above?

OR

Instead of beanNameConfig.java , there is another way to declare a class as a bean , @Component , If i’m not wrong , (and another ways ? @Service ? ) , is it Spring 2.5 way? no needed for Spring 3 way?

trackback
How to load multiple Spring bean configuration file

[…] project-classpath/Spring-All-Module.xml Note In Spring3, the alternative solution is using JavaConfig @Import. […]