Spring @Autowired 주입 팁 자세히 보기
3406 단어 Spring@Autowired주입
1. 같은 유형을 여러 번 같은 실례로 주입한다
일단 이 코드가 뭔지 한번 볼까요?
@Autowired
private XiaoMing xiaoming;
@Autowired
private XiaoMing wanger;
XiaoMing.java
package com.example.demo.beans.impl;
import org.springframework.stereotype.Service;
/**
*
* The class XiaoMing.
*
* Description:
*
* @author: huangjiawei
* @since: 2018 7 23
* @version: $Revision$ $Date$ $LastChangedBy$
*
*/
@Service
public class XiaoMing {
public void printName() {
System.err.println(" ");
}
}
우리는 @Autowired
유형( Type
에 따라 자동으로 주입할 수 있고 기본적으로 주입된 bean이 단례( SingleTon
인 것을 알고 있다. 그러면 위에서 두 번 주입하면 중복되지 않느냐고 물어볼 수 있다.답은 긍정적이다.그리고 매번 주입되는 실례는 같은 실례이다.다음은 간단히 검증해 보겠습니다.
@RestController
public class MyController {
@Autowired
private XiaoMing xiaoming;
@Autowired
private XiaoMing wanger;
@RequestMapping(value = "/test.json", method = RequestMethod.GET)
public String test() {
System.err.println(xiaoming);
System.err.println(wanger);
return "hello";
}
}
위의 인터페이스를 호출한 후 아래의 내용을 출력하면 둘이 같은 실례임을 알 수 있다.com.example.demo.beans.impl.XiaoMing@6afd4ce9
com.example.demo.beans.impl.XiaoMing@6afd4ce9
2. 주입 인터페이스 유형 실례
만약 우리가 주입하고자 하는 유형이 하나의 인터페이스 유형으로 성명되고, 이 인터페이스는 1개 이상의 실현 클래스가 있다면, 아래의 코드는 정상적으로 실행될 수 있습니까?우리는
Student
를 인터페이스로 가정하고 WangEr
과 XiaoMing
를 두 가지 실현류로 한다.
@Autowired
private Student stu1;
@Autowired
private Student stu2;
@Service
public class XiaoMing implements Student {
@Service
public class WangEr implements Student {
답은 위의 코드가 정상적으로 작동하지 않고 Spring이 오류를 보고하기 시작했습니다. 왜냐하면 Spring은 Student에 하나의 실례를 주입하려고 했지만 주입하는 과정에서 의외로 두 개를 발견했기 때문에 오류를 보고했습니다. 구체적인 오류 정보는 다음과 같습니다.Field stu1 in com.example.demo.controller.MyController required a single bean, but 2 were found:
- wangEr: defined in file [C:\Users\huangjiawei\Desktop\demo\target\classes\com\example\demo\beans\impl\WangEr.class]
- xiaoMing: defined in file [C:\Users\huangjiawei\Desktop\demo\target\classes\com\example\demo\beans\impl\XiaoMing.class]
그럼 어떻게 해야 되지?일반적인 사고방식에서 우리는 모든 실현 클래스에 id 값을 분배할 것을 생각하는데 그 결과 다음과 같은 코드가 생겼다.
@Autowired
private Student stu1;
@Autowired
private Student stu2;
@Service("stu1")
public class XiaoMing implements Student {
@Service("stu2")
public class WangEr implements Student {
위의 설정을 마치면 스프링은 필드 이름에 따라 기본적으로 bean 공장에 가서 해당하는 bean을 찾아 주입합니다. 이름은 마음대로 찾을 수 없습니다. 주입된 속성 이름과 일치해야 합니다.3. 총결산
@Autowired
을 여러 번 주입할 수 있고 모든 주입의 실례는 같은 실례이다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[MeU] Hashtag 기능 개발➡️ 기존 Tag 테이블에 존재하지 않는 해시태그라면 Tag , tagPostMapping 테이블에 모두 추가 ➡️ 기존에 존재하는 해시태그라면, tagPostMapping 테이블에만 추가 이후에 개발할 태그 기반 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.