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