Từ version 7, Spring introduce thêm cho chúng ta một cách nữa để các bạn có thể đăng ký một hoặc nhiều bean cùng một lúc trong Spring container sử dụng implementation của interface BeanRegistrar. Cụ thể như thế nào? Hãy cùng mình tìm hiểu trong bài viết này các bạn nhé!
Mình sẽ tạo một Maven project:

với Spring Framework dependency:
|
1 2 3 4 5 |
<dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>7.0.1</version> </dependency> |
để làm ví dụ.
Giả sử mình có class Hello như sau:
|
1 2 3 4 5 6 7 8 |
package com.huongdanjava.spring; public class Hello { public void say() { System.out.println("Hello World!"); } } |
Để đăng ký bean cho class Hello này sử dụng implementation của interface BeanRegistrar, các bạn có thể override lại phương thức register() của interface BeanRegistrar và sử dụng các phương thức registerBean() của class BeanRegistry như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
package com.huongdanjava.spring; import org.springframework.beans.factory.BeanRegistrar; import org.springframework.beans.factory.BeanRegistry; import org.springframework.core.env.Environment; public class HDJBeanRegistrar implements BeanRegistrar { @Override public void register(BeanRegistry registry, Environment env) { registry.registerBean(Hello.class); } } |
Với tham số là class Hello.class như trên, Spring sẽ tự động generate một unique bean name dựa vào class name và khởi tạo bean cho class Hello trong Spring container.
Các bạn có thể gán bean name mà các bạn muốn, hoặc cũng có thể thêm điều kiện để khởi tạo bean cho class Hello, ví dụ như sau:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
package com.huongdanjava.spring; import org.springframework.beans.factory.BeanRegistrar; import org.springframework.beans.factory.BeanRegistry; import org.springframework.core.env.Environment; public class HDJBeanRegistrar implements BeanRegistrar { @Override public void register(BeanRegistry registry, Environment env) { registry.registerBean(Hello.class); registry.registerBean("huongdanjava_hello", Hello.class); if (env.matchesProfiles("dev")) { registry.registerBean("huongdanjava_hello_dev", Hello.class); } } } |
Sau khi đã implement interface BeanRegistrar xong, các bạn có thể sử dụng annotation @Import để khai báo định nghĩa bean này với Spring container, như sau:
|
1 2 3 4 5 6 7 8 9 10 |
package com.huongdanjava.spring; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; @Configuration @Import(HDJBeanRegistrar.class) public class AppConfig { } |
Bây giờ thì các bạn có thể lấy bean của class Hello ra và sử dụng:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
package com.huongdanjava.spring; import org.springframework.context.ApplicationContext; import org.springframework.context.annotation.AnnotationConfigApplicationContext; public class Application { static void main() { ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); Hello hello = context.getBean("huongdanjava_hello", Hello.class); hello.say(); } } |
Kết quả của mình như sau:

