Создать объект весной с аннотациями (Inject, Autowired) или с getBean

1

Я пытаюсь понять DI весной. Где я должен использовать объект с context.getBean и где с аннотацией @inject?

public class App {
    public static void main(String[] args) {
        new Controller().iniController();

    }
}

public class Controller {

    public void iniController() {       

        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("com/beans/beans.xml");
        Address address = context.getBean("address", Address.class);
        Person person = context.getBean("person", Person.class);
        Employee employee = context.getBean("employee", Employee.class);

        address.setCity("my city");
        person.setName("my name");

        System.out.println(employee);

        context.close();
    }

}

Правильно ли получать объекты адреса, человека и сотрудника с помощью метода context.getBean?


@Component
public class Employee {

    @Inject
    private Person person;
    @Inject
    private Address address;

    @Override
    public String toString() {
        return "Employee: "+ person.getName() +" from "+ address.getCity();
    }
}

Здесь у меня есть личные и адресные объекты с Inject, могу ли я также получить их с помощью метода getBean?


@Component
public class Address {

    private String city;

    public String getCity() {
        return city;
    }

    public void setCity(String city) {
        this.city = city;
    }

}

@Component
public class Person {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd">


    <context:annotation-config></context:annotation-config>
    <context:component-scan base-package="com.model"></context:component-scan>
</beans>
  • 0
    Первое: посмотрите на Spring Boot. Он обрабатывает большую часть конфигурации шаблона для вас. Вам почти никогда не нужно явно использовать getBean ; Я не думаю, что я когда-либо имел в реальном коде.
Теги:
spring
dependency-injection
annotations
inject

1 ответ

0
Лучший ответ

Вы всегда должны предпочесть инъекцию зависимостей, через getBean, или я должен избегать использования getBean вообще.

Инъекционная инъекция очень эффективна при связывании слабосвязанных компонентов и при настройке этих компонентов. Особенно, если связь между компонентами длится на протяжении всего срока службы компонентов.

Более конкретно, инъекция зависимости эффективна в таких ситуациях:

  1. Вам необходимо ввести данные конфигурации в один или несколько компонентов.
  2. Вам нужно ввести одну и ту же зависимость в несколько компонентов. Вы
  3. Вам нужно вводить различные реализации одной и той же зависимости. Вы
  4. Вам нужно внедрить ту же реализацию в разных конфигурациях.
  5. Вам нужны некоторые услуги, предоставляемые контейнером.

Определение DI помогает вам легко изменять основные реализации, не беспокоясь о тех, кто использует эту реализацию.

И если это все еще оставляет вас озадаченным, вы можете найти множество причин для использования DI в Google

  • 0
    Спасибо за ваш хороший ответ. В теории я это знаю, но как мне решить такой простой пример на практике?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню