Spring Зависимость от ввоза Autowiring 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 и условиях впрыскивания зависимостей. Моя переменная restTemplate имеет значение null и выдает исключение. Что я могу сделать, как его решить (я не знаю, связано ли это с тем, что я использую ключевое слово new)?

Ответ 1

Использование Bridge wb = new Bridge() не работает с инъекцией зависимостей. Ваш restTemplate не вводится, потому что wb не управляется Spring.

Вам нужно сделать свой Bridge a Spring bean сам, например. по аннотации:

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

или bean:

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

Ответ 2

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

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

Bridge wb = new Bridge();

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

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

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

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

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

Ответ 3

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

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

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

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