XML配置:無法自動裝配Autowired子bean父對象在春季啓動分配
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
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/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd">
<bean class="com.fossians.maven_courses.Say_Impl" id="id_Say_Impl" />
</beans>
Say_I
public interface Say_I
{
public void Say_I_m1();
}
Say_Impl
public class Say_Impl implements Say_I
{
public void Say_I_m1()
{
System.out.println("inside : public void Say_I_m1() \n");
}
}
控制器:
public class Controller_Test implements SpringApplicationContextInterface
{
@Autowired
private Say_Impl say_Impl;
//Below line not assigning, need to reassign into method
private Say_I say_I = (Say_I) say_Impl;
// private Say_I say_I = (Say_I) applicationContext.getBean("id_Say_Impl");
@RequestMapping(value = "/test10")
public String Test1()
{
say_I = say_Impl;
System.out.println("Say_Impl_auto : "+say_Impl);
System.out.println("Say_I : "+say_I);
say_I.Say_I_m1();
return " request value = test10 ";
}
}
public interface SpringApplicationContextInterface
{
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beanConfig.xml");
}
@SpringBootApplication
@ImportResource("classpath:beanConfig.xml")
public class Courses extends SpringBootServletInitializer
{
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application)
{
return application.sources(Courses.class);
}
}
上面的代碼是彈簧啓動的應用程序的一部分。
內部 「Controller_Test」 級這行代碼:
private Say_I say_I = (Say_I) say_Impl;
未分配Say_Impl對象 「say_Impl」 參考到它的父對象say_I。但是,如果我再次將它分配到Test1()方法,那麼它正在工作。
但下面的代碼行將say_Impl引用賦值給say_I對象。
private Say_I say_I = (Say_I) applicationContext.getBean("id_Say_Impl");
現在的問題是,當我通過自動裝配爲什麼我需要將其重新分配到方法服用say_impl對象?有沒有辦法讓它工作而不需要重新分配?
當我通過應用程序上下文獲取bean時,我不需要重新分配,爲什麼?
你應該自動佈線類型Say_I'的'字段,而不能'Say_Impl'。基本上你不應該在使用接口時注入一個具體的類型。此外,爲了給出更好的答案,您的問題中有太多缺失的部分以及不清楚的部分。 –
@M。 Deinum,你需要更多的信息? –
你的xml配置是缺少的部分,這是如何加載的,你的控制器實現了什麼'SpringApplicationContextInterface'等等。但是編程到接口時,你仍然應該在你的代碼中使用'Say_I'而不是'Say_Impl'。 –