Code ví dụ Spring Boot Inject bean với ApplicationContextAware
(Xem lại: Inject Spring Bean vào các class không phải là @Component)
ApplicationContextAware là một interface cho phép truy cập tới Spring Bean, các file resource.
Các công nghệ sử dụng:
Tạo Spring Boot Project
Không cần chọn thêm thư viện nào nữa nhé.
Cấu trúc Project:
Cài đặt lại interface ApplicationContextAware
package stackjava.com.beantutils; import org.springframework.beans.BeansException; import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContextAware; import org.springframework.stereotype.Service; @Service public class BeanUtils implements ApplicationContextAware { private static ApplicationContext context; @Override public void setApplicationContext(ApplicationContext applicationContext) throws BeansException { context = applicationContext; } public static <T> T getBean(Class<T> beanClass) { return context.getBean(beanClass); } }
Tạo Spring Bean:
Ở đây mình tạo bean bằng cách dùng annotation @Repository
package stackjava.com.beantutils.dao; import org.springframework.stereotype.Repository; @Repository public class UserDAO { public void save() { System.out.println("-------- Save User --------"); } }
Lấy bean thông qua BeanUtils:
package stackjava.com.beantutils; import stackjava.com.beantutils.dao.UserDAO; public class MainApp { public void save() { UserDAO userDAO = BeanUtils.getBean(UserDAO.class); userDAO.save(); } }
Class MainApp
không được quản lý bởi Spring Container, nhưng thông qua BeanUtils
ta vẫn có thể lấy được bean UserDAO
Demo:
package stackjava.com.beantutils; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; @SpringBootApplication public class Application { public static void main(String[] args) { SpringApplication.run(Application.class, args); MainApp mainApp = new MainApp(); mainApp.save(); } }
MainApp không phải là Spring Bean nên mình tạo mới bằng từ khóa new
Kết quả:
Okay, Done!
Download code ví dụ trên tại đây.
References:
https://docs.spring.io/spring-framework/…/ApplicationContextAware.html