Spring 조립 bean 의 3 가지 방식
먼저 SpringMVC 프로젝트 를 자체 건설 합 니 다.자체 프로젝트 를 만 드 는 과정 에서 두 개의 eclipse 문제 가 발생 했 습 니 다.
1. maven 프로젝트 를 만 들 었 지만 웹 콘 텐 츠 파일 이 없습니다.
프로젝트 - > 속성 - > 프로젝트 페 이 스 - > 동적 웹 모듈
2. 웹 콘 텐 츠 파일 에 웹. xml 이 없습니다.
오른쪽 키 항목 - > Java EE Tools - > Generate Deployment Descriptor Stub
내 maven 의존 설정:
org.springframework
spring-web
4.1.2.RELEASE
compile
org.springframework
spring-webmvc
4.1.2.RELEASE
compile
org.springframework
spring-test
4.1.2.RELEASE
compile
junit
junit
4.12
test
Spring 조립 Bean 은 3 가지 방법 이 있 습 니 다.
1. 자동화 설정
2.JavaConfig
3.XML
자동화 설정:
1. 자바 에 자동 검색 설정, 기본 스 캔 현재 가방 및 현재 가방 의 모든 하위 가방
@Configuration
@ComponentScan
public class CDPlayerConfig {
}
스 캔 기본 패키지 지정
@ComponentScan("com.spring")
기본 패키지
@ComponentScan(basePackages={"com.spring","com.jpa"})
이상 은 String 을 통 해 기본 패 키 지 를 지 정 했 습 니 다. 이러한 방법 은 안전 하지 않 을 수 있 습 니 다. (이해 하지 못 함) 코드 를 재 구성 하면 모든 지정 한 기본 패 키 지 는 오류 가 발생 할 수 있 기 때문에 이렇게 할 수 있 습 니 다.
@Component(basePackageClasses={My.class,She.class})
2. XML 에서 자동 검색 설정
현재 상황 에서 @ Component 주석 이 존재 하 는 모든 클래스 는 자동 으로 bean 으로 스 캔 됩 니 다. bean 의 id 가 지정 되 지 않 으 면 bean 의 id 는 이니셜 소문 자로 존재 합 니 다.
@Component
public class SqtPeppers implements CompactDisc {
}
bean 의 id 지정:
@Component("sqt")
자동 조립 은 Spring 이 bean 의존 을 자동 으로 만족 시 키 는 방법 으로 @ Autowired 의 주 해 를 빌 리 는 것 입 니 다.
구조 기 에 사용 할 수 있 습 니 다:
@Autowired
public CDPlayer(SqtPeppers sqt){
this.sqt = sqt;
}
setter 방법 에 사용 할 수 있 습 니 다:
@Autowired
public void setSqtPeppers(SqtPeppers sqt){
this.sqt = sqt;
}
속성 에 사용 가능:
@Autowired
private SqtPeppers sqt;
이상 은 자동 조립 을 실현 할 수 있 지만 일치 하 는 bean 조립 이 없 으 면 상하 문 생 성 을 응용 할 때 Spring 에서 이상 을 던 집 니 다.이상 을 피하 기 위해:
@Autowired(required=false)
일치 하지 않 으 면 이 bean 은 일치 하지 않 는 상태 에 있 습 니 다.
자바 코드 로 bean 조립
@Configuration
//@ComponentScan
public class CDPlayerConfig {
@Bean(name="sqt")
public CompactDisc sqtPeppers(){
return new SqtPeppers();
}
@Bean
public MediaPlay cdPlay(){
return new CDPlayer(new SqtPeppers());
}
}
javaConfig 에서 @ Componentscan 주 해 를 제거 하고 @ Bean 주해 에 맞 추 는 방법 으로 bean 을 가 져 옵 니 다.기본적으로 bean 의 id 는 방법 명 입 니 다. sqtPeppers () 방법 에 @ Bean 주석 이 있 기 때문에 cdPlay () 방법 에서 호출 된 new 대상 은 Spring 에 의 해 차단 되 어 해당 bean 으로 되 돌아 갑 니 다.
사실은 이렇게 쓸 수 있다.
@Bean
public MediaPlay cdPlay(CompactDisc compactDisc){
return new CDPlayer(compactDisc);
}
XML 로 bean 설정 하기
간단 한 bean 설명:
Id 가 지정 되 지 않 았 기 때문에 전체 한정 클래스 이름 지정 ID 를 사 용 했 습 니 다. 이때 bean 의 ID 는 'com. spring. CDplayer \ # 0' 입 니 다. 그 중에서 \ # 0 은 하나의 계수 형식 으로 같은 유형의 서로 다른 bean 을 구분 하 는 데 사 용 됩 니 다.
지정 한 id:
구조 기 주입 초기 화 bean:
1. 원소
2. Spring 3.0 을 사용 하여 도입 한 c - 네 임 스페이스:
XML 의 맨 위 에 모드 를 설명해 야 합 니 다.
xmlns:c="http:www.springframework.org/schema/c"
c - 네 임 스페이스 성명 후 구조 적 인 파 라 메 터 를 설명 할 수 있 습 니 다.
위 에서 구조 파 라 메 터 를 사용 할 때 구조 적 매개 변수 이름 인 'sqt' 를 직접 참조 하고 위치 참조 방식 도 지원 합 니 다.
XML 에 서 는 숫자 를 첫 글자 로 허용 하지 않 기 때문에 밑줄 을 사용 합 니 다.
하나의 구조 적 매개 변수 만 있 을 때 우 리 는 간략하게 쓸 수 있다.
지금까지 해 낸 것 은 모두 인용 주입 이 었 고 그 다음 에 글자 의 양 (value) 을 주입 했다.
c - 네 임 스페이스 도 사용 할 수 있 습 니 다:
매개 변수 가 하나 밖 에 없 을 때 도 간략하게 쓸 수 있 습 니 다.
인용 과 글자 양의 조립 은 c - 네 임 스페이스 나 차이 가 없 지만 다음 조립 은 c - 네 임 스페이스 에서 할 수 없습니다.
조립 집합:
value 대신 ref 를 사용 할 수도 있 습 니 다. set 를 사용 할 때 중복 되 는 요 소 를 무시 하고 순 서 를 보장 할 수 없습니다. Spring in action 을 배 울 때 c - 네 임 스페이스 성명 집합 을 사용 할 수 없습니다.
이상 은 완전히 구조 기 를 통 해 주입 되 었 습 니 다. 그 다음 에 setter 를 사용 하여 주입 하 는 방식 입 니 다.
구조 기 주입 에 강하 게 의존 하고 선택 적 으로 setter 주입 에 의존 합 니 다.
p - 네 임 스페이스 를 사용 합 니 다. c - 네 임 스페이스 의 용법 과 유사 합 니 다. p - 네 임 스페이스 는 태그 줄 이기 입 니 다.
성명 p - 네 임 스페이스:
xmlns:p="http:www.springframework.org/schema/c"
p - 네 임 스페이스 를 사용 하여 setter 주입:
글자 의 양 을 주입 할 때 구조 기 주입 과 유사 하 게 바 꾸 면 된다.
p - 네 임 스페이스 도 집합 을 설치 할 수 없습니다.
util - 네 임 스페이스 사용:
우선 util:
util - 네 임 스페이스 를 사용 하면 list, set 요 소 를 설명 할 수 있 습 니 다.
bean 의 속성 주입 집합.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
thymeleaf로 HTML 페이지를 동적으로 만듭니다 (spring + gradle)지난번에는 에서 화면에 HTML을 표시했습니다. 이번에는 화면을 동적으로 움직여보고 싶기 때문에 입력한 문자를 화면에 표시시키고 싶습니다. 초보자의 비망록이므로 이상한 점 등 있으면 지적 받을 수 있으면 기쁩니다! ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.