2016-08-14 5 views
0

Spring@Autowired을 사용하여 주 클래스에 인스턴스를 삽입했지만 실패했습니다.@Autowired가 작동하지 않지만 getBean이 작동합니다.

나는 이전 인터페이스를 구현하는 OracleClientImpl이라는 클래스 인 인터페이스가 OracleClient이고 그 내용은 다음과 같습니다.

Oracleclient

public interface OracleClient { 
    void doSomething(); 
} 

OracleClientImpl

@Service("oracleClient") 
public class OracleClientImpl implements OracleClient { 

    @Override 
    public void doSomething() { 
     System.out.println("doSomething"); 
    } 
} 

그리고 나는 나의 봄 구성 파일에 다음 줄을 추가했습니다 :

<context:annotation-config/> 
<context:component-scan base-package="com.company" /> 

내 주요 클래스 외모 같은 :

public class App { 

    @Autowired 
    private static OracleClient oracleClient; 

    public static void main(String[] args) throws IOException { 
     ApplicationContext cxt = new ClassPathXmlApplicationContext("spring-config.xml"); 
     oracleClient.doSomething(); 
    } 
} 

그것은 작동하지 않습니다, oracleClient이 경우 null입니다. 그러나 @Autowired 대신 코드를 사용하여 빈을 얻으려고하면 oracleClient이 성공적으로 주입됩니다.

public class App { 

    public static void main(String[] args) throws IOException { 
     ApplicationContext cxt = new ClassPathXmlApplicationContext("spring-config.xml"); 
     OracleClient oracleClient = (OracleClientImpl) cxt.getBean("oracleClient"); 
     oracleClient.doSomething(); 
    } 
} 

왜 그런지 궁금합니다. @Autowired을 통해 작동하도록하는 방법이 있습니까?

답변

-1

oracleClient static 변수가 잘못 선언되었습니다. @ AutoWired는 setter 메소드와 동등합니다. Spring에서 정적 setter 메소드를 수행하는 방법은 static 키워드를 제거해야합니다.

+0

아니요. 'static'키워드가 삭제되었지만 여전히 작동하지 않았습니다. setter/getter 메소드를 어딘가에 설정해야합니까? – Searene

+0

오, 너 농담 해? 알았어 @ 자동 사용? autowired 요소를 스프링 컨테이너에 넣는다는 것을 의미합니다. 컨테이너로 밀어 넣은 후에도 main 메소드의 컨테이너에서 인스턴스를 가져와야합니다. – Crabime

관련 문제