Spring : @Autowired 注释 - 在哪里查看实际更改?

Spring : @Autowired annotation - where to view the actual changes?

基于此处所遵循的示例: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 文件的内容。

我在我的项目中搜索了所有文件,没有看到除 Employee 和 Department 之外的任何对象(Department)引用。

2 - XML 文件位于何处,可以查看使用 @Autowired 注释所影响的更改?

我认为您错过了大局。 您注释 类,以便它们由 Spring 管理。 为了使用 Spring 你必须调整你的 main.

@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 中管理的,但我们的员工不是我们这样做的。 我们应该让 Spring 通过为我们的员工创建一个 bean 并获取该 bean 来处理这个问题。我们在 类 中创建 bean,在 @Configuration 中注释或通过 ComponentScan。

此外,您在注释方面所做的所有更改都不会在任何 .xml 文件中显示。

您没有将 department 设置为任何东西,因为 department 是一个 pojo,要从自动装配中受益,您最好在由 [= 加载的配置 class 中执行类似以下操作17=]开机

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

虽然您提供了 link,但我猜您甚至没有遵循它,因为它显示他们使用 XML 配置 bean,您没有这样做,因此自动装配将无法工作.