복붙노트

[SPRING] 자바 커스텀 / 단순 태그에 스프링 관리 빈을 주입하는 우아한 방법이 있는가?

SPRING

자바 커스텀 / 단순 태그에 스프링 관리 빈을 주입하는 우아한 방법이 있는가?

나는 스프링 관리 빈을 사용하는 자바 사용자 정의 태그를 많이 가지고있다. 나는 커스텀 태그를 삽입 할 방법을 찾지 못하기 때문에 모든 스프링 빈 객체에 대해 "getTheObjectINeedBean ()"정적 메소드를 제공하는 도우미 클래스를 만들었다. 필요합니다 .. 나는이 접근법을 전혀 좋아하지 않습니다.

난 정말 스프링 관리 빈을 사용자 정의 태그에 삽입 할 수 있기를 원합니다.

방법이 있습니까? 내 연구가 진행되는 한, 맞춤 태그가 컨테이너로 관리되기 때문에이를 수행 할 방법이 없다는 것을 이해합니다.

감사,

곤봉

해결법

  1. ==============================

    1.스프링에 의해 관리되지 않기 때문에 jstl 태그에서 의존성 삽입을 사용하는 간단한 방법이 없다는 것이 맞습니다. 그러나 최소한 두 가지 해결 방법이 있습니다.

    스프링에 의해 관리되지 않기 때문에 jstl 태그에서 의존성 삽입을 사용하는 간단한 방법이 없다는 것이 맞습니다. 그러나 최소한 두 가지 해결 방법이 있습니다.

    어떤 옵션이든 추가 코드가 필요하거나 "흑 마법"이 필요하지 않기 때문에 어느 옵션도 완벽하지 않습니다.

  2. ==============================

    2.@ Bozho의 게시물을 확장하려면 다음과 같이 작동해야합니다. (봄 3.0에서는 찾을 수있는 ApplicationContext Utils가 없습니다)

    @ Bozho의 게시물을 확장하려면 다음과 같이 작동해야합니다. (봄 3.0에서는 찾을 수있는 ApplicationContext Utils가 없습니다)

    public class LocationTag extends RequestContextAwareTag {
        @Autowired
        PathComponent path;
    
    ...
        @Override
        protected int doStartTagInternal() throws Exception {
            if (path == null) {
                log.debug("Autowiring the bean");
                WebApplicationContext wac = getRequestContext().getWebApplicationContext();
                AutowireCapableBeanFactory acbf = wac.getAutowireCapableBeanFactory();
                acbf.autowireBean(this);
            }
            return SKIP_BODY;
        }
    }
    
  3. ==============================

    3.위에서 설명한 솔루션은 작동하지만 일부 배경 및 추가 코드 스 니펫이 유용 할 수 있습니다.

    위에서 설명한 솔루션은 작동하지만 일부 배경 및 추가 코드 스 니펫이 유용 할 수 있습니다.

    1) doStartTagInternal 메소드는 doStartTag 메소드에서 호출됩니다. 2) doStartTag를 호출하기 전에 먼저 pageContext를 설정해야했습니다. 3) autowiring과는 반대로 콩을 조회했다. 내게 이것은 더 직설적 인 것 같다 : (YourBeanProxy) autowireCapableBeanFactory.getBean ( "yourBeanName")

    이 추가 정보가 유용하게 사용되기를 바랍니다.

  4. from https://stackoverflow.com/questions/3445908/is-there-an-elegant-way-to-inject-a-spring-managed-bean-into-a-java-custom-simpl by cc-by-sa and MIT license