Since the release of Spring 3, JavaConfig is part of core module and provides and easy way to configure Spring applications. In this post I am going to show how you can achieve complete Java based configuration in Spring 3 without any XML files.
Before we start looking at the code lets look at some basic Spring annotation and their meanings.
@Configuration: It indicates that a class declares one or more
@Bean: This annotation is applied to methods that create beans in a Spring context. The name of the bean is the method name.
These two annotation are minimum requirement to start with XML less configuration in spring. Let see the code now:
Yo can also use @ComponentScan annotation to instantiate the beans outside of AppConfig class. Spring IoC scans the the package or class name given as argument to @ComponentScan annotation and instantiates them as beans if they have @Service or @Component annotation.
Before we start looking at the code lets look at some basic Spring annotation and their meanings.
@Configuration: It indicates that a class declares one or more
Bean methods and may be processed
by the Spring container to generate bean definitions and service requests for those beans
at runtime.@Bean: This annotation is applied to methods that create beans in a Spring context. The name of the bean is the method name.
These two annotation are minimum requirement to start with XML less configuration in spring. Let see the code now:
/**
* This is purely java based configuration and do not uses
* any XML files.
*/
@Configuration
public class AppConfig {
/**
* This creates bean with name testBean. Note that the bean name is method name by default. In
* this case bean name will be testBean.
*/
@Bean
public MyBean testBean() {
return new TestBean();
}
/**
* You can override the default name providing your own name to bean annotation. In this case
* bean name will be renamedBean.
*/
@Bean(name = "renamedBean")
public AnotherBean anotherBean() {
return new AnotherBean();
}
public static void main(String[] args) {
// Initialize spring container. Note that we are giving AppConfig.class so that spring loads
// beans defined in this class
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
System.out.println("calling a bean method");
// Retrieve the bean from Container by class
MyBean bean = context.getBean(MyBean.class);
// Retrieve the bean from Container by name
// typecase is required
AnotherBean anotherBean = (AnotherBean) context.getBean("renamedDao");
bean.helloWorld();
anotherBean.helloSpring();
}
}
Yo can also use @ComponentScan annotation to instantiate the beans outside of AppConfig class. Spring IoC scans the the package or class name given as argument to @ComponentScan annotation and instantiates them as beans if they have @Service or @Component annotation.
@Configuration
@ComponentScan("test.package") //scans test.packages for any components and instantiates them a beans
public class AppConfig {
No comments:
Post a Comment