Spring 에서 Bean 생 성 완료 후 지정 한 코드 를 실행 하 는 몇 가지 구현 방식

2458 단어 자바spring
실제 개발 에 서 는 spring 용기 에 어떤 bean 을 불 러 온 후에 업무 코드 를 실행 해 야 하 는 장면 을 자주 볼 수 있 습 니 다.예 를 들 어 설정 초기 화,캐 시 등.다음 과 같은 몇 가지 방식 으로 이 수 요 를 실현 할 수 있다(보충 을 환영 합 니 다)
ApplicationListener 인터페이스 구현
ApplicationListener 인 터 페 이 스 를 실현 하고 방법 onApplicationEvent()방법 을 실현 합 니 다.Bean 은 생 성 이 완료 되면 onApplicationEvent 방법 을 실행 합 니 다.
@Component
public class DoByApplicationListener implements ApplicationListener {
    public DoByApplicationListener() {
        System.out.println("DoByApplicationListener constructor");
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (event.getApplicationContext().getParent() == null) {
            System.out.println("DoByApplicationListener do something");
        }
    }
}

InitialingBean 인터페이스 구현
InitialingBean 인 터 페 이 스 를 실현 하고 방법 을 실현 합 니 다.after PropertiesSet(),Bean 은 생 성 이 완료 되면 after PropertiesSet()방법 을 실행 합 니 다.
@Component
public class DoByInitializingBean implements InitializingBean {
    public DoByInitializingBean() {
        System.out.println("DoByInitializingBean constructor");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("InitByInitializingBean do something");
    }
}

@PostConstruct 주석 사용 하기
빈 의 어떤 방법 에@PostConstruct 주 해 를 사용 하면 빈 은 생 성 이 완료 되면 이 방법 을 실행 합 니 다.
@Component
public class DoByPostConstructAnnotation {
    public DoByPostConstructAnnotation() {
        System.out.println("DoByPostConstructAnnotation constructor");
    }

    @PostConstruct
    public void init(){
        System.out.println("InitByPostConstructAnnotation do something");
    }
}

init-method 사용 하기
init-metod 를 사용 하면 Bean 이 생 성 이 끝 난 후에 사용 하 는 방법 을 초기 화 할 수 있 습 니 다.예 를 들 어 Bike 류 가 있 습 니 다.
public class Bike {
    public Bike() {
        System.out.println("Bike constructor");
    }
    public void initBike() {
        System.out.println("Bike do something");
    }
}

@Configuration 주 해 를 사용 하여 용 기 를 시작 하고 Bike 의 초기 화 방법 을 initBike 로 설정 합 니 다.
@Configuration
public class DoByInitMethod {
    @Bean(initMethod ="initBike")
    public Bike bike() {
        return new Bike();
    }
}

이상 의 방식 과 코드 는 모두 테스트 실행 되 었 습 니 다.절대 사용 할 수 있 습 니 다!

좋은 웹페이지 즐겨찾기