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

References

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

About the Author

mkyong
Founder of Mkyong.com and HostingCompass.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

  • Pingback: water ionizer loans()

  • Pingback: pay day loans()

  • Pingback: pay per day loans plan()

  • Pingback: parking()

  • Pingback: parking()

  • Pingback: YouTube favorites kopen()

  • Pingback: water ionizer()

  • Pingback: alkaline water benefits()

  • Pingback: laan penge nu()

  • Pingback: xnxx()

  • Pingback: tv packages()

  • Pingback: TV options for restaurants()

  • Pingback: Blue Coaster33()

  • Pingback: Um mundo Java sem XML | Blog da Concrete()

  • Levan

    Thanks!

  • 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

  • Pingback: Spring Tutorial()

  • 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?

    • http://www.mkyong.com mkyong

      Better practice is group related beans in in a single module file, then create a main config file to include all, centralize control.

      It will make your project more modular and easy to maintain.

      Of course, @Component is still supported in Spring3 :). JavaConfig is just a new way to define the configuration stuff in Spring3.

  • Pingback: How to load multiple Spring bean configuration file()