弹簧依赖注入自动布线空值

我能够使用RestTemplate并自动连接它。但是,我想将我的 rest 模板相关部分代码移动到另一个类中,如下所示:

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!");
    }
}

在另一堂课上,我称之为:

...
Bridge wb = new Bridge();
wb.addW();
...

我是春季和依赖注入术语的新手。我的变量为空并引发异常。我能做些什么来解决它(我不知道它与我使用关键字有关)?restTemplatenew


答案 1

使用不适用于依赖关系注入。你没有被注射,因为在没有被春天管理。Bridge wb = new Bridge()restTemplatewb

你必须制作你的Spring Bean本身,例如通过注释:Bridge

@Service
public class Bridge {
    // ...
}

或通过豆子声明:

<bean id="bridge" class="Bridge"/>

答案 2

只是为了进一步补充杰哈的正确答案。

目前,通过做

Bridge wb = new Bridge();

这意味着,该对象实例不是“Spring Managed”的 - 即Spring对它一无所知。那么它怎么能注入一个它一无所知的依赖关系。

正如杰哈所说。添加@Service注释或在应用程序上下文 xml 配置文件中指定它(或者,如果您使用的是 Spring 3,则 @Configuration 对象)

然后,当 Spring 上下文启动时,BeanFactory 中将有一个 Bridge.class 的 Singleton(默认行为)实例。要么将其注入其他Spring管理对象,要么手动将其拉出,例如

Bridge wb = (Bridge) applicationContext.getBean("bridge"); // Name comes from the default of the class

现在,它将连接依赖项。


推荐