스프링 순환 의존
7168 단어 프레임
존재 구조 주입
public class AServieImpl implements AService{
private TestService testService;
public void setTestService(TestService testService){
this.testService=testService;
}
public AServieImpl(){
}
}
public class TestServiceImpl implements TestService {
private AService aService;
@Override
public void test() {
// TODO
System.out.println("test serviceimpl");
}
public TestServiceImpl(AService aService){
this.aService=aService;
}
}
class="com.test.service.impl.AServiceImpl" name="aService" id="aService" >
<property name="testService" ref="testService">property>
class="com.test.service.impl.TestServiceImpl" name="testService" id="testService" >
name="aService" ref="aService">
오류 보고: org. springframework. beans. factory. AnnantLoadBeanClassException: ServletContext 리 소스 [/ WEB - INF / spring. xml] 에 정 의 된 이름 'aService' 가 있 는 bean 의 클래스 [com. test. service. impl. Service Impl] 을 찾 을 수 없습니다.
구조 주입 은 의존 대상 을 초기 화하 고 그 자 체 를 예화 하 는 것 이다.따라서 TestServiceImpl 이 실례 화 되 려 면 먼저 AService 를 초기 화한 다음 에 AService 를 찾 아가 야 한다.그러나 설정 값 주입 은 인 스 턴 스 자체 로 의존 대상 을 초기 화 합 니 다.그래서 아 서 비 스 는 그 자 체 를 예화 하 는 동시에 TestServiceImpl 에 의존 하 라 고 요구 한 다음 에 TestServiceImpl 을 찾 지 못 했다.그래서 잘못 보 고 했 어.
Spring 용 기 는 만 들 고 있 는 모든 bean 식별 자 를 '현재 bean 풀 만 들 기' 에 놓 습 니 다. bean 식별 자 는 만 드 는 과정 에서 이 풀 에 계속 유 지 됩 니 다. 따라서 bean 을 만 드 는 과정 에서 자신 이 '현재 bean 풀 만 들 기' 에 있 는 것 을 발견 하면 Bean Currently InCreation Exception 이상 을 던 져 순환 의존 을 표시 합 니 다.생 성 이 끝 난 bean 은 '현재 bean 풀 만 들 기' 에서 삭 제 됩 니 다.setter 주입 에 대한 의존 은 Spring 용 기 를 통 해 무 참 구조 함수 의 정례 화 를 완 료 했 으 나 다른 절차 (예 를 들 어 setter 주입) 를 완성 하지 못 한 bean 을 미리 노출 시 켜 완성 한 것 이 며, 단일 역할 도 메 인의 bean 순환 의존 만 해결 할 수 있 습 니 다.하나의 단일 공장 방법 을 미리 노출 시 켜 다른 bean 이 이 bean 을 참조 할 수 있 도록 합 니 다.
addSingletonFactory(beanName, new ObjectFactory() {
public Object getObject() throws BeansException {
return getEarlyBeanReference(beanName, mbd, bean);
}
});
단일 설정 값 주입
public class AServieImpl implements AService{
private TestService testService;
public void setTestService(TestService testService){
this.testService=testService;
}
}
public class TestServiceImpl implements TestService {
private AService aService;
@Override
public void test() {
// TODO
System.out.println("test serviceimpl");
}
public void setaService(AService aService) {
this.aService = aService;
}
}
class="com.test.service.impl.AServieImpl" name="aService" id="aService" >
<property name="testService" ref="testService">property>
class="com.test.service.impl.TestServiceImpl" name="testService" id="testService" >
<property name="aService" ref="aService">property>
단일 set 주입 이 가능 합 니 다.단일 체 가 아니면 안 돼.Spring 용 기 는 캐 시 'prototype' 역할 영역의 bean 을 하지 않 기 때문에 생 성 중인 bean 을 미리 노출 할 수 없습니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Pytest 테스트 프레임워크 기본 사용 방법 상세 정보pytest 소개 2. 매개 변수화를 지원하여 테스트할 테스트 용례를 세밀하게 제어할 수 있다. 3. 간단한 단원 테스트와 복잡한 기능 테스트를 지원할 수 있고selenium/appnium 등 자동화 테스트, 인터페...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.