kam*_*aci 15 java spring dependency-injection autowired
我能够使用RestTemplate并自动装配它.但是,我想将我的其余模板相关的代码部分移动到另一个类中,如下所示:
public class Bridge {
private final String BASE_URL = "http://localhost:8080/u";
@Autowired
RestTemplate restTemplate;
public void addW() {
Map<String, String> x = new HashMap<String, String>();
W c = restTemplate.getForObject(BASE_URL + "/device/yeni", W.class, x);
System.out.println("Here!");
}
}
Run Code Online (Sandbox Code Playgroud)
在另一个班级我称之为:
...
Bridge wb = new Bridge();
wb.addW();
...
Run Code Online (Sandbox Code Playgroud)
我是Spring和依赖注入术语的新手.我的restTemplate 变量为null并抛出异常.我该怎么做才能解决它(我不知道它与我使用 new关键字有关)?
jeh*_*eha 11
使用Bridge wb = new Bridge()不适用于依赖注入.你restTemplate没有被注入,因为wb没有被Spring管理.
你必须自己制作Bridge一个Spring bean,例如通过注释:
@Service
public class Bridge {
// ...
}
Run Code Online (Sandbox Code Playgroud)
或通过bean声明:
<bean id="bridge" class="Bridge"/>
Run Code Online (Sandbox Code Playgroud)
只是为了进一步补充Jeha的正确答案.
目前,通过做
Bridge wb = new Bridge();
Run Code Online (Sandbox Code Playgroud)
意味着,该对象实例不是"Spring Managed" - 即Spring对此一无所知.那么它怎么能注入一个它一无所知的依赖.
所以,正如杰哈所说.添加@Service注释或在应用程序上下文xml配置文件中指定它(或者如果您使用的是Spring 3 @ Configuration对象)
然后,当Spring上下文启动时,BeanFactory中将存在Bridge.class的Singleton(默认行为)实例.将其注入您的其他Spring-Managed对象,或者手动将其拉出,例如
Bridge wb = (Bridge) applicationContext.getBean("bridge"); // Name comes from the default of the class
Run Code Online (Sandbox Code Playgroud)
现在它将连接依赖关系.
| 归档时间: |
|
| 查看次数: |
28492 次 |
| 最近记录: |