spring 용기 외부 용기 내부 bean 가 져 오기

사고방식 단계:      
   1. 도구 류 SpringUtil 의 정적 방법 과 정적 인용 을 정의 합 니 다.
    2. 인터페이스 Application ContextAware 를 실현 하 는 setApplication Context 방법.
    3. spring 용 기 는 이 대상 을 만 드 는 과정 에서 자신의 인용 주입 대상 (Component 주석, spring 이 이 bean 을 스 캔 하도록 합 니 다).
코딩 순서
1. springutil 작성:
import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringUtil implements ApplicationContextAware {

    private static ApplicationContext spring;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        if(spring == null) {
            spring = applicationContext;
        }

    //  applicationContext
    public static ApplicationContext getApplicationContext() {
        return spring;
    }

    //  name   Bean.
    public static Object getBean(String name){
        return getApplicationContext().getBean(name);
    }

    //  class  Bean.
    public static  T getBean(Class clazz){
        return getApplicationContext().getBean(clazz);
    }

    //  name,  Clazz     Bean
    public static  T getBean(String name,Class clazz){
        return getApplicationContext().getBean(name, clazz);
    }

}

2. 테스트 준비
2.1 우 리 는 시작 할 때 먼저 코드 방식 으로 spring 용기 에 bean 을 주입 하여 다음 과 같다.
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class BeanConfig {
    @Bean(name="testDemo")
    public Demo generateDemo() {
        Demo demo = new Demo();
        demo.setId(123);
        demo.setName("test");
        return demo;
    }
}

2.2 실체 데모 클래스
import lombok.Data;

@Data public class Demo {

      private int id;

      private String name;

}

3. 테스트
그리고 테스트 controller 를 작성 하고 방금 쓴 springutil 에서 이 bean 을 가 져 옵 니 다.
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/application")
public class TestApplicationController {
    
    @RequestMapping("/test")
    public Object testSpringUtil() {
        return SpringUtil.getBean("testDemo");
    }
    
}

좋은 웹페이지 즐겨찾기