[SPRING] AOP가있는 Spring session scope bean의 문제점
SPRINGAOP가있는 Spring session scope bean의 문제점
HomeController 클래스에 currentUser 인스턴스를 주입하려고합니다. 따라서 모든 요청에 대해 HomeController에는 currentUser 객체가 있습니다.
내 구성 :
<bean id="homeController" class="com.xxxxx.actions.HomeController">
<property name="serviceExecutor" ref="serviceExecutorApi"/>
<property name="currentUser" ref="currentUser"/>
</bean>
<bean id="userProviderFactoryBean" class="com.xxxxx.UserProvider">
<property name="userDao" ref="userDao"/>
</bean>
<bean id="currentUser" factory-bean="userProviderFactoryBean" scope="session">
<aop:scoped-proxy/>
</bean>
하지만 다음과 같은 오류가 발생합니다.
Caused by: java.lang.IllegalStateException: Cannot create scoped proxy for bean 'scopedTarget.currentUser': Target type could not be determined at the time of proxy creation.
at org.springframework.aop.scope.ScopedProxyFactoryBean.setBeanFactory(ScopedProxyFactoryBean.java:94)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1350)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:540)
문제가 무엇입니까? 더 나은 / 간단한 대안이 있습니까?
건배.
해결법
-
==============================
1.범위가 지정된 프록시를 사용하면 Spring은 컨텍스트가 초기화 될 때 Bean의 유형을 알아야하며,이 경우에는 수행하지 못합니다. 더 많은 정보를 제공해야합니다.
범위가 지정된 프록시를 사용하면 Spring은 컨텍스트가 초기화 될 때 Bean의 유형을 알아야하며,이 경우에는 수행하지 못합니다. 더 많은 정보를 제공해야합니다.
factory-method를 지정하지 않고 currentUser 정의에서 factory-bean 만 지정한다는 것을 알았습니다. 저는 사실 두 사람이 일반적으로 함께 사용되기 때문에 그것이 유효한 정의라는 사실에 다소 놀랐습니다. 따라서 사용자 bean을 생성하는 userProviderFactoryBean의 메소드를 지정하는 factory 메소드 속성을 currentUser에 추가하십시오. 이 메소드는 Spring이 currentUser 유형을 추론하는 데 사용할 User 클래스의 리턴 유형을 가져야합니다.
편집 : 좋아, 아래에 귀하의 의견을 후, 당신은 봄에 공장 콩을 사용하는 방법을 오해했습니다 것 같습니다. FactoryBean 타입의 bean을 가지고 있다면 factory-bean 속성을 사용할 필요가 없다. 그래서 이것 대신 :
<bean id="userProviderFactoryBean" class="com.xxxxx.UserProvider"> <property name="userDao" ref="userDao"/> </bean> <bean id="currentUser" factory-bean="userProviderFactoryBean" scope="session"> <aop:scoped-proxy/> </bean>
당신은 단지 이것을 필요로합니다 :
<bean id="currentUser" class="com.xxxxx.UserProvider" scope="session"> <aop:scoped-proxy/> <property name="userDao" ref="userDao"/> </bean>
여기에서 UserProvider는 FactoryBean이고 Spring은이를 처리하는 방법을 알고 있습니다. 최종 결과는 currentUser bean이 UserProvider 인스턴스가 아닌 UserProvider가 생성하는 것입니다.
factory-bean 애트리뷰트는 팩토리가 FactoryBean 구현이 아니라 단지 POJO 일 때 사용되며, Spring에게 팩토리 사용법을 명시 적으로 알려준다. 그러나 FactoryBean을 사용하기 때문에이 속성이 필요 없습니다.
from https://stackoverflow.com/questions/1951259/problem-in-spring-session-scope-bean-with-aop by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] Spring OAuth2.0 - OAuth2.0 클라이언트를 동적으로 등록 (0) | 2019.04.13 |
---|---|
[SPRING] 트랜잭션에서 롤백 없음 - Spring Boot 2.0 (0) | 2019.04.13 |
[SPRING] Date 만 사용하는 Spring 데이터 쿼리 (0) | 2019.04.13 |
[SPRING] 스프링 부트 WebClient를 사용하여 페이지 매김 된 API 응답을 수집하는 방법? (0) | 2019.04.13 |
[SPRING] JavaFX 및 Spring - Bean은 자동 연결을 지원하지 않습니다. (0) | 2019.04.13 |