Spring: аннотация @Autowired - где посмотреть актуальные изменения? - PullRequest
0 голосов
/ 13 марта 2020

На основе приведенного здесь примера: https://dzone.com/articles/autowiring-in-spring

import org.springframework.stereotype.Component;

@Component
public class Department {
    private String deptName;
    public String getDeptName() {
        return deptName;
    }
    public void setDeptName(String deptName) {
        this.deptName = deptName;
    }
}

Аннотация @Autowired размещена в Департаменте.

import org.springframework.beans.factory.annotation.Autowired;

public class Employee {
    private int eid;
    private String ename;
    @Autowired
    private Department department; //<----------------------
    public int getEid() {
        return eid;
    }
    public void setEid(int eid) {
        this.eid = eid;
    }
    public String getEname() {
        return ename;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public Department getDepartment() {
        return department;
    }
    public void setDepartment(Department department) {
        this.department = department;
    }
    public void showEmployeeDetails(){
        System.out.println("Employee Id : " + eid);
        System.out.println("Employee Name : " + ename);
        System.out.println("Department : " + department.getDeptName());
    }
}

Запускает программу.

public class RunThis {
    public static void main(String[] args) 
    {
        System.out.println("Hello World");
        Employee emp = new Employee();
        emp.showEmployeeDetails();
    }
}

Запуск программы приводит к исключению NULL, которое ожидается, но для указанного URL оно выглядит так:

@Autowired on Properties
In the below example, when the annotation is directly used on properties, Spring looks for and injects Department when Employee is created. 

В результате я истолковал, что это означает, что объект Department неявно будет создан за кулисами во время создания объекта Employee, но, по-видимому, это неправильно.

1 - Как можно изменить этот образец для просмотра реальных преимуществ аннотации @Autowired?

Во многих других примерах аннотация @Autowired влияет на то, что записано в какой-то XML файл в моем проекте.

Я искал в своем проекте все файлы и не вижу никаких ссылок на объект (Отдел), кроме Сотрудника и Отдела.

2 - Где находится файл XML, в котором можно просмотреть изменения, затронутые использованием аннотации @Autowired?

Ответы [ 2 ]

1 голос
/ 13 марта 2020

Вы не установили отдел как что-либо, так как отдел - это pojo, чтобы воспользоваться преимуществами автопроводки, вам лучше сделать что-то вроде следующего в классе конфигурации, который загружается при весенней загрузке

@Bean
public Department department () {
  Department department = new Department ();
  department.setDeptName("foo");
  return department;
}

Хотя ссылка, которую вы предоставили, вы даже не пошли по ней, я предполагаю, поскольку она показывает, как они конфигурируют компоненты с использованием XML, что вы еще не сделали, поэтому автоматическое подключение не будет работать.

1 голос
/ 13 марта 2020

Я думаю, вам не хватает общей картины. Вы комментируете классы так, чтобы они управлялись Spring. Чтобы использовать Spring, вам нужно адаптировать свой основной.

@SpringBootApplication
public class RunThis {
    public static void main(String[] args) 
    {
        SpringApplication.run(RunThis.class, args);
        System.out.println("Hello World");
        Employee emp = new Employee();
        emp.showEmployeeDetails();
    }
}

Теперь наш проект управляется весной, но наш сотрудник не такой, как мы. Мы должны позволить Spring справиться с этим путем создания компонента для нашего сотрудника и получения этого компонента. Создание бинов мы делаем в классах, аннотированных в @Configuration или через ComponentScan.

Кроме того, все ваши изменения, касающиеся аннотирования, не будут видны ни в одном файле. xml.

...