강의

멘토링

커뮤니티

Cộng đồng Hỏi & Đáp của Inflearn

Hình ảnh hồ sơ của truestar
truestar

câu hỏi đã được viết

Công nghệ cốt lõi của Spring Framework

IoC Container Phần 2: ApplicationContext và các phương thức cấu hình Bean khác nhau

Bean 을 특정 Application...Event 발생 후, 등록하는 방법이 궁금합니다

Đã giải quyết

Viết

·

586

0

`App 초기화 이후 App..Event 발생시점에 Bean 등록이 가능할까요?`

이런 방법이 필요한 배경은 이렇습니다.
DB 데이터가 초기화 된 이후, S.Security 에서 URL 리소스를 불러들이는 클래스가 있는데,


이 클래스(Filter)가
@Bean 으로 되어 있으면, DB 에 데이터가 INSERT 되기 전에
Bean 등록과 동시에 Security 설정이 완료가 되버려 DB에 없는 URL 인가정보를 SELECT 해서 인가처리가 불가능 하더라구요. 그래서 사용한 방법이 Filter POJO화 입니다.

Filter @Bean 등록 메서드에 @Bean 주석처리 후
 POJO 화 시킨다음 초기화시 POJO 를 사용하고,

러닝타임(ContextRefreshedEvent 발생이후) 부터 기존 POJO 를 Bean 으로 등록하여 사용하려는 목적 때문에
이런 방법을 시도해보게 되었습니다.

강의영상에서 가능 할 듯한 내용을 확인한 부분은

  • context = new ApplicationConfigApplicationContext(Config.class)

즉, context 를 통해 Filter 가 빈으로 등록되는 Config 를 만들어 등록하려는데요,


질문입니다

   @EventListener(ContextRefreshedEvent.class)
public void onContextRefreshedEvent() {
...
...
}
  1. 이렇게, 핸들러 안에서 AppConfigAppContext 를 생성하여 등록하는 방법이 가능한가요?

  2. 불가능하다면, 가능한 방법이 있을까요?

이런 부분에 대해 조언을 구합니다.
읽어주셔서 감사해요

javaspring

Câu trả lời 3

0

Truestar님의 프로필 이미지
Truestar
Người đặt câu hỏi

강사님.
전혀 다른 방법으로 해결을 봤어요..
@Bean 이나, Data INSERT 시점을 변경하는 것은
무모했지만, 학습효과는 대단했습니다 ㅎㅎㅎ

Data 를 reload 하는 메서드를 Filter 내부에 작성하고/
App..ReadyEvent 핸들러에서 호출 하는 것으로 해결되었습니다.

질문과 자문자답으로, 실마리를 찾은거 같아 참 다행인것같습니다.
관심가져주셔서 감사드려요.. 고맙습니다.

0

Truestar님의 프로필 이미지
Truestar
Người đặt câu hỏi

강사님 답변 감사드립니다.

알려주신 BFPP 의 postProcessBeanFactory() 메서드가 발동 되도록 적용해보면
JPA 를 통해 데이터 INSERT 가  되기 이전에 실행되는것으로 판단이 되었어요.
( 테이블 생성 전 )


저도 이 부분을 이전에도 시도해 봤었지만,  ContextRefreshedEvent   가 발생하는 시점이
데이터 INSERT 가  끝나기 때문에, @Bean 을 재등록 해야 하는 상황이 필요하게 되었습니다

어떻게 해야 BFPP 를 Query 실행 이후 작동되게 할 수 있을까요?

Query 실행이 된 이후, Bean 전/후처리가 가능하거나,
Query 실행을 Bean 등록보다 먼저 되게 해야 할것 같은데요..
방법을 도무지 모르겠어요ㅠ

혹시 제가 놓치고 있는게 있는지 궁금합니다
읽어주셔서 감사해요

0

whiteship님의 프로필 이미지
whiteship
Người chia sẻ kiến thức

안녕하세요. BeanFactoryPostProcessor 라는 인터페이스가 있습니다. 아마 빈 라이브사이클에서 제가 잠시 언급했을 텐데 이 인터페이스의 구현체를 사용하시면 빈 팩토리가 만들어진 이후에 원하는 일들을 하실 수 있을겁니다. 스프링 @AOP를 생각해 보시면 특정 빈을 감싼 프록시 빈을 만들어 등록해 주는 일을 하는데 그때도 역시 BFPP의 구현체가 사용됩니다.

Hình ảnh hồ sơ của truestar
truestar

câu hỏi đã được viết

Đặt câu hỏi