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,您没有这样做,因此自动装配将无法工作.
基于此处所遵循的示例: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,您没有这样做,因此自动装配将无法工作.