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
을 통해 작동하도록하는 방법이 있습니까?
아니요. 'static'키워드가 삭제되었지만 여전히 작동하지 않았습니다. setter/getter 메소드를 어딘가에 설정해야합니까? – Searene
오, 너 농담 해? 알았어 @ 자동 사용? autowired 요소를 스프링 컨테이너에 넣는다는 것을 의미합니다. 컨테이너로 밀어 넣은 후에도 main 메소드의 컨테이너에서 인스턴스를 가져와야합니다. – Crabime