Пружинная зависимая система впрыска топлива Null

Я смог использовать 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!");
    }
}

И в другом классе я называю это:

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

Я новичок в терминах Spring и Dependency Injection. мой restTemplate переменная равна нулю и выдает исключение. Что я могу сделать, как решить (не знаю, связано ли это с new ключевое слово)?

3 ответа

Решение

С помощью Bridge wb = new Bridge() не работает с внедрением зависимости. Ваш restTemplate не вводится, потому что wb Весной не удалось.

Вы должны сделать свой Bridge сам Spring bean, например, с помощью аннотации:

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

или объявлением бина:

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

Просто чтобы добавить к правильному ответу Джеха.

В настоящее время, делая

Bridge wb = new Bridge();

Означает, что этот экземпляр объекта не "Spring Managed" - то есть Spring ничего не знает об этом. Так как же он может внедрить зависимость, о которой он ничего не знает?

Так как Джеха сказал. Добавьте аннотацию @Service или укажите ее в конфигурационном файле xml контекста приложения (или, если вы используете Spring 3, вы @ объект конфигурации)

Затем, когда запускается контекст Spring, в BeanFactory будет экземпляр Singleton (поведение по умолчанию) класса Bridge.class. Либо добавьте это в другие объекты Spring-Managed, либо вытащите его вручную, например

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

Теперь он будет иметь зависимые соединения.

Если вы хотите использовать оператор new и все еще вводить все зависимости, то вместо того, чтобы сделать это пружинным компонентом (с помощью аннотации @Service), сделайте его классом @Configurable.

Таким образом, даже объект будет создан новыми операторными зависимостями.

Немного конфигурации также требуется. Подробное объяснение и пример проекта здесь.

http://spring-framework-interoperability.blogspot.in/2012/07/spring-managed-components.html

Другие вопросы по тегам