Spring 학습 - 같은 인 터 페 이 스 를 자동 으로 조립 하 는 여러 실현 류
13652 단어 spring
소개 하 다.
평소에 Spring 의 DI 메커니즘 을 사용 할 때 거의 모든 종류 에서 인 터 페 이 스 를 인용 하 는 단일 한 실현 이다.그러나 Spring 은 어떻게 여러 실현 류 를 동시에
List 에 주입 합 니까?그래, 쓸데없는 소리 하지 말고 코드 를 바로 달 아 라.원래 의 인용 방식
public interface HelloService {
void sayHello();
}
@Service
public class TestServiceImpl implements TestService {
@Autowired
private HelloService helloService;
}
Spring 고급 기능
아니면
HelloService 인 터 페 이 스 를 예 로 들 어 여러 개의 인 스 턴 스 를 실현 합 니까?HelloService 인터페이스
public interface HelloService {
void sayHello();
}
HelloService 실현 클래스
각각 실례 화
, , 의 세 가지 세계 인사 실현 류.@Service("Cat")
@Order(10)
public class CatHelloService implements HelloService {
@Override
public void sayHello() {
System.out.println("I'm a Cat,Hello world!");
}
}
@Service
@Order(3)
public class DogHelloService implements HelloService {
@Override
public void sayHello() {
System.out.println("I'm a Dog,Hello world!");
}
}
@Service
@Order(1)
public class PigHelloService implements HelloService {
@Override
public void sayHello() {
System.out.println("I'm a pig,Hello world!");
}
}
@Service("Cat") 을 통 해 실현 류 의 bean 이름 을 지정 하고 @Order(3) 을 통 해 실현 류 의 순 서 를 지정 합 니 다.HelloService 의 테스트 클래스 참조
public interface TestService {
void sayHello();
}
@Service
public class TestServiceImpl implements TestService {
@Autowired
private List<HelloService> multiServiceList;
@Autowired
private Map<String, HelloService> multiServiceMap;
@Override
public void sayHello() {
System.out.println("--------------list--------------");
for (HelloService multiService : multiServiceList) {
multiService.sayHello();
}
System.out.println("--------------map--------------");
for (Map.Entry<String, HelloService> entry : multiServiceMap.entrySet()) {
System.out.println("key=" + entry.getKey());
entry.getValue().sayHello();
}
}
}
TestServiceImpl 이 유형 에서 List 와 Map 두 가지 방식 으로 HelloService 의 실현 류 주입 을 도 입 했 는데 우리 가 기대 하 는 대로 HelloService 의 모든 유형 을 주입 할 수 있 기 를 기대한다.테스트 주 클래스
Spring 을 초기 화하 고 호출 하 는 방법
TestServicepublic class TestMain {
public static void main(String[] args) {
GenericApplicationContext applicationContext = new AnnotationConfigApplicationContext("cn.followtry.boot");
TestService testService = applicationContext.getBean(TestService.class);
testService.sayHello();
System.out.println(" ");
}
}
실행 결과
--------------list--------------
I'm a pig,Hello world!
I'm a Dog,Hello world!
I'm a Cat,Hello world!
--------------map--------------
key=Cat
I'm a Cat,Hello world!
key=dogHelloService
I'm a Dog,Hello world!
key=pigHelloService
I'm a pig,Hello world!
인쇄 결 과 를 통 해 알 수 있 듯 이,
TestService 의 List 에 주입 하고 우리 가 @Order 을 통 해 지정 한 순서에 따라 Service 이름 을 지정 하지 않 으 면 기본 이름 의 이니셜 로 정렬 합 니 다.TestService 의 Map, Key 는 Bean 의 이름, value 는 대응 하 는 실현 류 에 주입 했다.맵 의 구체 적 인 유형 은 LinkedHashMap 이기 때문에 우리 가 지정 한 순서에 따라 집행 되 지 않 았 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.