튜토리얼의 봄 시리즈
- 스프링 프레임 워크 소개
- 스프링 프레임 워크 모듈
- 스프링 개발 환경 구축하기 (이클립스)
- 간단한 봄 응용 프로그램을 만듭니다
- 컨트롤 컨테이너의 봄 반전 (Inversion of Control에 - IOC)
- 알 의존성 주입 (DI - 의존성 주입)
- 콩 XML 구성 (1) - XML 설정을 통해이 콩로드
- 콩 XML 구성 (2) - 콩 범위 및 라이프 사이클 콜백 메소드 구성
- 콩 XML 구성 (3) - 구성 의존성 주입
- 콩 XML 구성 (4) - 자동 조립
- 콩 주석 (주석) 구성 (1) - 주석을 통해 콩을로드
- 콩 주석 (주석) 구성 (2) - 콩 범위 및 수명 콜백 방법 구성
- 콩 주석 (주석) 구성 (3) - 구성 의존성 삽입
- 콩 자바 구성
- 봄 가로 지향 프로그래밍 (AOP)
- 봄 이벤트 (1) - 내장 이벤트
- 봄 이벤트 (2) - 사용자 정의 이벤트
주석을 통해 방법 콩과 구성 종속성을 참고 : @Autowired
.
봄은 모든 스캔 @Component
클래스 정보 및 빈으로 등록하고, 다음에 봄 찾을 @Autowired
콩 주사를 의존하는 변수 코멘트를.
사용 @Autowired
주석 의존성 주입 세 가지 방법 :
- 생성자 주입
- 세터 주입
- 필드 주입
그렇지 않으면 주입 할 수없는 종속 클래스는 이미 콩 구성했는지 확인하십시오.
우리는 다음과 같은 범주 있습니다 :
Database.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Database implements Service {
@Override
public String name() {
return "数据库名称:MySQL";
}
@Override
public void run() {
System.out.println("数据库正在运行");
}
@Override
public void stop() {
System.out.println("数据库已经停止");
}
}
Logger.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Logger implements Service {
@Override
public String name() {
return "Logger X";
}
@Override
public void run() {
System.out.println("Loggery已经准备好");
}
@Override
public void stop() {
System.out.println("Logger已经停止");
}
}
Mail.java
package com.qikegu.demo;
import org.springframework.stereotype.Component;
@Component
public class Mail implements Service {
@Override
public String name() {
return "邮件收发";
}
@Override
public void run() {
System.out.println("邮件收发正在运行");
}
@Override
public void stop() {
System.out.println("邮件收发已经停止");
}
}
1. 생성자 삽입
사용 @Autowired
주석 항목 생성자 의존성 주입 클래스를.
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
private Service mainService;
private Service[] services;
public App(){
}
/*
// 构造方法注入
@Autowired
public App(@Qualifier("logger") Service main){
this.setMainService(main);
}
*/
// 构造方法注入
@Autowired
public App(Service[] services){
this.setServices(services);
}
public Service getMainService() {
return mainService;
}
public void setMainService(Service mainService) {
this.mainService = mainService;
}
public Service[] getServices() {
return services;
}
public void setServices(Service[] services) {
this.services = services;
}
}
참고 : 자동 조립을위한 하나의 생성자입니다.
- 질문 1 : 매개 변수 유형 생성자 당신이 볼 수
Service
있는 인터페이스, 그것은 몇 가지 구현 클래스를 주입 클래스를 달성 할 수있는이 인스턴스가?
하나 개의 구현 클래스 경우, 기본적으로,이 클래스를 주입합니다.
구현 된 여러 클래스가있는 경우의 사용을 필요로 @Qualifier("bean_id")
주석을 명시 적으로 지정합니다. 지정되지 않은 경우, Spring 컨테이너는 일치하는 항목이없는 경우, 예외가 발생, 구현 클래스에 따라 변수 이름과 일치합니다.
들어 public App(Service[] services)
서비스 배열 : Spring은 클래스 주입의 모든 인스턴스를 달성 할 것입니다.
- 질문 2 : 어떤 방법으로 스프링 컨테이너는 Bean을 일치?
기본값은 사용되는 데이터 형식합니다 (byType와)이며, @Qualifier
이름 (요소 별명)에 의해, 주석 중.
2. 세터 메소드 삽입
로 전화 @Autowired
setter 메소드 주석 분사 종속성.
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
private Service mainService;
private Service[] services;
public App(){
}
public Service getMainService() {
return mainService;
}
// Setter方法注入
@Autowired
@Qualifier("logger")
public void setMainService(Service mainService) {
this.mainService = mainService;
}
public Service[] getServices() {
return services;
}
@Autowired
public void setServices(Service[] services) {
this.services = services;
}
}
하나와 사실, @Autowired
방법은 주석, 당신은 단지 세터 방법, 종속성을 주입 할 수 있습니다.
// Setter方法注入
@Autowired
@Qualifier("logger")
public void anyMethod(Service mainService) {
this.mainService = mainService;
}
3. 필드 주입
이용하여 물체 필드 @Autowired
주입 종속성 주석.
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;
@Component
public class App {
// 字段注入
@Autowired
@Qualifier("logger")
private Service mainService;
// 字段注入
@Autowired
private Service[] services;
public App(){
}
public Service getMainService() {
return mainService;
}
public Service[] getServices() {
return services;
}
}
- 질문 :이 더 나은 의존성 주입, 여러 종류를 언급?
이 프로젝트를 통해, 자신의 환경 설정을 참조 일관성을 선택하는 자신의 장점을 가지고 있습니다
주입 특수 값으로
세터 의존성 주입 이외에 생성자 메소드, 필드를 사용하는 방법은, 주사도 값일 수있다.
App.java
package com.qikegu.demo;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
@Component
public class App {
// 使用@Value注解注入值
@Value("1024")
private int id;
public App(){
}
// 使用@Value注解注入值
public App(@Value("1024") int id){
this.id = id;
}
public int getId() {
return id;
}
// 使用@Value注解注入值
@Value("1024")
public void setId(int id) {
this.id = id;
}
}