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




