1. Introduction
Spring Container can be instantiated using AnnotationConfigApplicationContext. AnnotationConfigApplicationContext was introduced in Spring 3.0. AnnotationConfigApplicationContext is an implementation of ApplicationContext.
This accepts @Configuration classes, @Component classes and classes annotated with JSR-330 metadata.
When @Configuration classes are supplied, the @Configuration class is registered as a bean definition, and all its declared @Bean methods are also registered as separate bean definitions. When @Component and JSR-330 classes are provided, they are registered as bean definitions, with the assumption that dependency injection metadata like @Autowired or @Inject is used within those classes where needed.
2. Construction
Here is an example of creating AnnotationConfigApplicationContext with @Configuration class. Here supplied class AppConfig is a class annotated with @Configuration:
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
Here is an example of AnnotationConfigApplicationContext working with JSR-330 annotated class.
public static void main(String[] args) {
ApplicationContext ctx = new AnnotationConfigApplicationContext(MyServiceImpl.class, Dependency1.class, Dependency2.class);
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
3. Building the container programmatically
You can instantiate an AnnotationConfigApplicationContext by using a no-arg constructor and then configure it by using the register() method. Here is an example:
public static void main(String[] args) {
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
ctx.register(AppConfig.class, OtherConfig.class);
ctx.register(SomeMoreConfig.class);
ctx.refresh();
MyService myService = ctx.getBean(MyService.class);
myService.doStuff();
}
To enable To enable component scanning, you can annotate your @Configuration class with @ComponentScan. Here is an example:
@Configuration
@ComponentScan(basePackages = "com.learnitweb")
public class AppConfig {
// ...
}
4. Conclusion
In conclusion, the AnnotationConfigApplicationContext in Spring provides a powerful and flexible way to configure and manage your application context using annotations. By leveraging @Configuration classes and @Bean methods, you can define and manage beans with ease. Additionally, support for @Component and JSR-330 annotations allows for seamless dependency injection, ensuring that your application components are properly wired and managed by the Spring IoC container. This approach promotes a clean, maintainable, and scalable architecture for your Spring applications.
