2012-11-27 3 views
1

스프링 어노테이션 예제를 다운로드했지만 삽입 할 클래스를 선택하는 방법을 볼 수없고 코드와 구성을 잘 알고 있습니다. (도시하지 않음)에 IWriter 인터페이스스프링 주석은 삽입 할 클래스를 어떻게 선택합니까?

package writers; 
import org.springframework.stereotype.Service; 

@Service 
public class NiceWriter implements IWriter { 
    public void writer(String s) { 
     System.out.println("Nice Writer - " + s); 
    } 
} 


package writers; 
import org.springframework.stereotype.Service; 

@Service 
public class Writer implements IWriter{ 
    public void writer(String s) { 
     System.out.println("Writer - "+s); 
    } 
} 

package testbean; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Service; 

import writers.IWriter; 

    @Service 
    public class SpringBeanWithDI{ 
     private IWriter writer; 

     @Autowired 
     public void setWriter(IWriter writer) { 
      this.writer = writer; 
     } 

     public void run() { 
      String s = "This is my test"; 
      writer.writer(s); 
     } 
    } 

테스트 빈의 구현 처음 몇 : -

package main; 

import org.springframework.beans.factory.BeanFactory; 
import org.springframework.context.ApplicationContext; 
import org.springframework.context.support.ClassPathXmlApplicationContext; 

import testbean.SpringBeanWithDI; 

public class TestBean { 
    public static void main(String[] args) { 
     ApplicationContext context = new ClassPathXmlApplicationContext("META-INF/beans.xml"); 
     BeanFactory factory = context; 
     SpringBeanWithDI test = (SpringBeanWithDI) factory.getBean("springBeanWithDI"); 
     test.run(); 
    } 
} 

과 beans.xml 환경 파일 : -

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-2.5.xsd 
      http://www.springframework.org/schema/aop 
      http://www.springframework.org/schema/aop/spring-aop-2.5.xsd 
      http://www.springframework.org/schema/context 
      http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

    <context:component-scan base-package="testbean" /> 
    <context:component-scan base-package="Writers" /> 

</beans> 

모든 매우 간단하지만 왜 항상 'Writer'구현을 주입합니까? documenation에서

답변

0

내가이 발견 : -

주 "대신의". 대체 매치를 들어, 콩 이름이 기본 규정 값으로 간주됩니다 이것은 콩이 ID로 정의 될 수 있음을 의미합니다 " 중첩 된 한정자 요소를 사용하여 동일한 일치 결과를 얻습니다.

그러나이 방법을 사용하여 특정 Bean을 이름으로 참조 할 수 있지만 기본적으로 @Autowired는 선택적 의미 적 한정자를 사용하는 유형 기반 주입에 대한 것입니다. 값은 심지어 bean 이름 대체를 사용할 때조차도 유형 일치 집합 내에서 항상 좁은 의미를 가지며 고유 한 bean id에 대한 의미를 의미 론적으로 표현하지 않습니다. " 예제에서 필자 필드는 'Writer'라는 클래스를 찾는 데 사용됩니다.

개인 IWriter 작가;

영리한! (아마도 너무 영리 해!)