2017-01-11 8 views
0

작성한 후에 변경해야하는 스프링 빈을 가지고 있지만 빈 클래스의 소스를 편집 할 수있는 권한이 없습니다. 그래서 나는 @PostConstruct 생성 후 bean 편집, 클래스에 대한 소스를 수정할 수 없습니까?

  • 이 콩은 다른 클래스에서 id로 만들 때 내가 감지 할 수있는 몇 가지 방법이

    • 초기화 메소드
    • InitializingBean 표시 ... 사용할 수 없습니다 그런 다음 필요한 변경 사항을 적용하십시오.

      감사

  • +0

    당신이 코드를하지 않았다 유일한 스프링 빈은 스프링 프레임 워크가 제공하는 콩입니다. 당신이 바꾸고 싶은 beens는 어디서 왔으며 어떻게 인스턴스화됩니까? –

    +0

    우리의 소프트웨어는 플랫폼, 솔루션 및 구현의 3 단계 유형 구조를 사용합니다. 변경하려고하는 bean은 플랫폼 라이브러리에 존재하며 구현 레벨에서 작업하고 있습니다. –

    +0

    다음 "기존 * 플랫폼 * 라이브러리를 변경하려고합니다."라는 문제가 발생하기를 바랍니다. 우리 모두 한계를 극복하기 위해 노력했지만 다음 플랫폼 출시를 기다릴 수는 없었지만 플랫폼을 확장하는 것이 올바른 일처럼 보입니다. 구현시 모든 스프링 컨텍스트를로드하는 경우 제안 된대로'''BeanPostProcessor'''를 사용할 수 있습니다 –

    답변

    1

    당신은 자신 만의 논리를 적용 할 BeanPostProcessor을 구현할 수 있습니다.

    예 : 일반적으로

    public class UserPassAuthFilterBeanPostProcessor implements BeanPostProcessor { 
    
        private String usernameParameter; 
        private String passwordParameter; 
    
        @Override 
        public final Object postProcessAfterInitialization(final Object bean, final String beanName) { 
         return bean; 
        } 
    
        @Override 
        public final Object postProcessBeforeInitialization(final Object bean, final String beanName) { 
         if (bean instanceof UsernamePasswordAuthenticationFilter) { 
          final UsernamePasswordAuthenticationFilter filter = (UsernamePasswordAuthenticationFilter) bean; 
          filter.setUsernameParameter(getUsernameParameter()); 
          filter.setPasswordParameter(getPasswordParameter()); 
         } 
    
         return bean; 
        } 
        //... 
    }