a02 - 2 조립 bean - java 코드 조립 (spring 실전)

  • 자바 코드 를 통 해 조립 bean 표시
  • 이 편 내용
  • 1. 자바 설정 코드 를 통 해 bean 대상 가 져 오기
  • 2. 자바 설정 코드 참조 방식 으로 대상 가 져 오기
  • 3. Spring 중 @ Bean 주 해 를 통 해 되 돌아 오 는 대상 은 단일 사례
  • 임 을 검증 합 니 다.
  • 4. 구조 기 방식 으로 Bean 주입
  • 5. Setter () 방식 으로 Bean
  • 을 주입 한다.
    기본 설정
    1. 인터페이스 만 들 기
    public interface CompactDisc {
    ​
        void play();
    }
    

    2. 실현 클래스 만 들 기
    @Component
    public class SgtPepper implements CompactDisc {
        public void play() {
            System.out.println(" sgt-pepper play ... ... ");
        }
    }
    
    public class CDPlayer {
    ​
    ​
        private CompactDisc compactDisc;
    ​
        public CDPlayer(CompactDisc compactDisc) {
            this.compactDisc = compactDisc;
        }
    ​
    ​
        public void play() {
            compactDisc.play();
        }
    ​
        public void setCompactDisc(CompactDisc compactDisc) {
            this.compactDisc = compactDisc;
        }
    ​
        public CompactDisc getCompactDisc() {
            return compactDisc;
        }
    }
    

    3. 프로필 생 성
    @Configuration
    public class CDConfig {
        
    }
    
  • 주해 설명:
  • @ Configuration: 현재 클래스 는 Spring 응용 컨 텍스트 에 Bean 디 테 일 을 어떻게 만 드 는 지 포함 하 는 설정 클래스 임 을 표시 합 니 다
  • 주의: 디 스 플레이 설정 방식 을 사용 하기 때문에 @ ComponentScan 주석 을 사용 하지 않 습 니 다
  • 2. 설정 파일 에 Bean 가 져 오 는 방법 추가
    1. 설정 클래스 수정
    @Configuration
    public class CDConfig {
    ​
        @Bean
        public CompactDisc sgtPepper() {
            return new SgtPepper();
        }
    }
    

    2. 테스트 클래스
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = CDConfig.class)
    public class CDPlayerTest {
    ​
        @Autowired
        private CDConfig cdConfig;
    ​
        @Test
        public void getBean() {
            CompactDisc compactDisc = cdConfig.sgtPepper();
            compactDisc.play();
        }
    }
    

    3. bean 의 ID 값 수정
  • 기본적으로 bean 의 ID 는 @ Bean 주석 이 있 는 방법 명 과 같 습 니 다
  • @Configuration
    public class PlayConfig {
    ​
        @Bean(name = "longSgtPepper")
        public CompactDisc sgtPepper() {
            return new SgtPepper();
        }
    }
    

    설명:
  • 1. @ Bean 주 해 는 Spring 에 게 이 방법 은 대상 을 되 돌려 줍 니 다. 이 대상 은 Spring 응용 컨 텍스트 의 ben 으로 등록 해 야 합 니 다.
  • 2, name = "longSgtPepper": 되 돌아 오 는 bean 대상 을 사용자 정의 이름 으로 설명 합 니 다
  • 3. 참조 생 성 Bean
    1. 프로필 수정
    @Configuration
    public class CDConfig {
    ​
        @Bean
        public CompactDisc sgtPepper() {
            return new SgtPepper();
        }
    ​
        @Bean
        public CDPlayer cdPlayer() {
            return new CDPlayer(sgtPepper());
        }
    }
    

    2. 테스트 클래스
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = CDConfig.class)
    public class CDPlayerTest {
    ​
        @Autowired
        private CDConfig cdConfig;
    ​
        @Test
        public void getCDPlayer(){
            CDPlayer cdPlayer = cdConfig.cdPlayer();
            cdPlayer.play();
        }
    }
    

    설명:
  • 1. new CDPlayer (sgtPeppers ()): 이 방법 에서 돌아 오 는 Bean 대상 은 sgtPeppers () 의 대상 과 같 습 니 다
  • 2. sgtPeppers () 가 bean 주 해 를 추 가 했 기 때문에 Spring 은 이 방법 에 대한 모든 호출 을 차단 하고 이 방법 으로 만 든 bean 을 직접 되 돌려 주 는 것 을 확보 합 니 다. 매번 이 방법 에 대해 실제 호출 하 는 것 이 아 닙 니 다
  • 4. Spring 에서 @ Bean 주 해 를 통 해 되 돌아 오 는 대상 은 단일 사례 임 을 검증 합 니 다.
    1. 설정 클래스 수정
    @Configuration
    public class CDConfig {
    ​
        @Bean
        public CompactDisc sgtPepper() {
            return new SgtPepper();
        }
    ​
        @Bean
        public CDPlayer cdPlayer() {
            return new CDPlayer(sgtPepper());
        }
    ​
        @Bean
        public CDPlayer anotherPlayer() {
            return new CDPlayer(sgtPepper());
        }
    }
    
  • Spring 의 bean 은 모두 단일 사례 이기 때문에 매번 bean 주 해 를 호출 하 는 방법 은 똑 같은 bean
  • 을 얻 을 수 있다.
    2. 테스트 클래스
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = CDConfig.class)
    public class CDPlayerTest {
    ​
        @Autowired
        private CDConfig cdConfig;
    ​
        @Test
        public void getBean() {
            CompactDisc compactDisc = cdConfig.sgtPepper();
            compactDisc.play();
        }
    ​
        @Test
        public void equalsBean() {
            CompactDisc compactDisc = cdConfig.sgtPepper();
            CDPlayer cdPlayer = cdConfig.anotherPlayer();
            CompactDisc compactDisc1 = cdPlayer.getCompactDisc();
            if (compactDisc.equals(compactDisc1)) {
                System.out.println("    ");
            }
        }
    }
    

    5. 구조 기 방식 으로 bean 주입
    1. 설정 클래스
    @Configuration
    public class CDConfig {
        
        @Bean
        public CDPlayer cdPlayer(CompactDisc compactDisc) {
            return new CDPlayer(compactDisc);
        }
    ​
    }
    

    설명:
  • new CDPlayer () 호출;CompactDisc 대상 을 자동 으로 설치 합 니 다. 방법 은 bean 대상
  • 을 적당 한 방법 으로 사용 하 는 것 을 체험 합 니 다.
    6. setter 방식 을 사용 합 니 다.
    1. 설정 클래스
    @Configuration
    public class CDConfig {
        
        @Bean
        public CDPlayer anotherPlayer(CompactDisc compactDisc) {
            CDPlayer cdPlayer = new CDPlayer(compactDisc);
            cdPlayer.setCompactDisc(compactDisc);
            return cdPlayer;
        }
    }
    

    2. 테스트 클래스
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = CDConfig.class)
    public class CDPlayerTest {
    ​
        @Autowired
        private CDConfig cdConfig;
    ​
        @Test
        public void equalsCDPlayer() {
            CDPlayer cdPlayer = cdConfig.cdPlayer(cdConfig.sgtPepper());
            CompactDisc compactDisc = cdPlayer.getCompactDisc();
            cdPlayer.play();
    ​
            CDPlayer cdPlayer1 = cdConfig.cdPlayer();
            CompactDisc compactDisc1 = cdPlayer1.getCompactDisc();
            cdPlayer1.play();
            if (compactDisc.equals(compactDisc1)) {
                System.out.println("    ");
            }
        }
    ​
    }
    

    코드 주소:
    
    https://github.com/brusion/brusion-code/tree/master/demo-java/03%20-%20demo%20-%20spring/spring-demo-study/01-di
    
    
    

    좋은 웹페이지 즐겨찾기