콩 주석 (주석) 구성 (3) - 구성 의존성 삽입


튜토리얼의 봄 시리즈


주석을 통해 방법 콩과 구성 종속성을 참고 : @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. 세터 메소드 삽입

로 전화 @Autowiredsetter 메소드 주석 분사 종속성.

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;
  }
}

추천

출처www.cnblogs.com/jinbuqi/p/10983456.html