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

spring starter project

Code ví dụ Spring Boot Inject bean ApplicationContextAware

Không cần chọn thêm thư viện nào nữa nhé.

Code ví dụ Spring Boot Inject bean ApplicationContextAware

Cấu trúc Project:

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

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ả:

demo inject bean với ApplicationContextAware

 

Okay, Done!

Download code ví dụ trên tại đây.

 

References:

https://docs.spring.io/spring-framework/…/ApplicationContextAware.html

stackjava.com