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
author image

mkyong

Founder of Mkyong.com, love Java and open source stuff. Follow him on Twitter. If you like my tutorials, consider make a donation to these charities. Read all published posts by

Comments

avatar
newest oldest most voted
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. […]

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
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 […]

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

Levan
Guest
Levan

Thanks!

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 […]

way2shopper
Guest
way2shopper

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

zs
Guest
zs

it’s simple and useful.

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

Joe
Guest
Joe

Can we use exception handler in XML ?

http://goo.gl/P2XEv8