Я пытаюсь понять 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>
Вы всегда должны предпочесть инъекцию зависимостей, через getBean, или я должен избегать использования getBean вообще.
Инъекционная инъекция очень эффективна при связывании слабосвязанных компонентов и при настройке этих компонентов. Особенно, если связь между компонентами длится на протяжении всего срока службы компонентов.
Более конкретно, инъекция зависимости эффективна в таких ситуациях:
Определение DI помогает вам легко изменять основные реализации, не беспокоясь о тех, кто использует эту реализацию.
И если это все еще оставляет вас озадаченным, вы можете найти множество причин для использования DI в Google
getBean
; Я не думаю, что я когда-либо имел в реальном коде.