STACKJAVA

Code ví dụ Spring Boot Inject bean với ApplicationContextAware

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