在本教程中,您将学习什么是 Sping Bean 以及如何使用它。
什么是 Sping Bean?
Bean 是构成应用程序的对象,并由 Spring IoC 容器管理。 Spring Framework 文档的正式定义是:
在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 Bean。 Bean 是由 Spring IoC 容器实例化,组装和以其他方式管理的对象。
如果您不熟悉 Spring IoC 容器,强烈建议您单击此处。您将被重定向到我撰写的有关该主题的文章。
bean 的定义包含称为配置元数据的内容。容器需要知道如何创建 Bean,Bean 的生命周期详细信息以及 Bean 的依赖关系。
如何声明一个 Bean?
我们可以简单地通过使用@Bean
注解来声明一个 bean。 声明带有@Bean
注解的方法的示例:
@Configuration
public class DemoConfig{
@Bean
public String demoService() {
return "Hello World!";
}
}
值得一提的是,当 JavaConfig 遇到@Bean
方法时,它将执行该方法并将返回值注册为BeanFactory
中的 bean。
域类
假设我们有一个名为Company
的类,该类具有一个将Employee
实例分配给实例变量的构造函数。 它还具有该员工的相应的 setter 和 getter 方法。
Company.java
public class Company {
private Employee employee;
public Company(Employee employee) {
this.employee = employee;
}
public void setEmployee(Employee employee) {
this.employee = employee;
}
public Employee getEmployee() {
return employee;
}
}
现在,让我们看看每个员工的结构:
public class Employee {
private int id;
private String firstName;
private String lastName;
public Employee(int id, String firstName, String lastName) {
this.id = id;
this.firstName = firstName;
this.lastName = lastName;
}
public setFirstName(String fName) {
firstName = fName;
}
public setLastName(String lName) {
lastName = lName;
}
public int getId() {
return id;
}
public String getFirstName() {
return firstName;
}
public String getLastName() {
return lastName;
}
}
具有单个构造函数和 setters/getters 方法的标准方法。
从以上两个类别中,您将如何将员工分配到特定公司? 好吧,首先您将实例化一个Employee
对象,然后将实例化一个Company
对象,并将Employee
对象作为构造函数参数传递。 像这样:
Emplyoee employee = new Employee(1, "John", "Smith");
Company company = new Company(employee);
这是通常的做法。 这种方法有什么问题? 想象一下,如果我们有数百堂课。 这将很难管理,甚至可能无法管理。
由于这个问题,我们有控制反转。 对象可以从 IoC 容器中检索其依赖关系,而不必自己构造依赖关系。
让我们看看如何通过包含本文的主要主题@Bean
来改进上述示例。
AppConfig.java
@Configuration
@ComponentScan(basePackageClasses = Company.class)
public class AppConfig {
@Bean
public Employee getEmployee() {
return new Eployee(1, "John", "Smith");
}
}
现在我们已经编写了配置类,我们需要创建AnnotationConfigApplicationContext
类的实例:
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);
现在完成! 我们已经使 IoC 容器初始化了 bean。 还有另一件事要做。 检查是否正确创建了 bean。
为此,只需实例化一个Company
实例,然后我们可以使用assertEquals
方法检查更正。
Company company = context.getBean("company", Company.class);
assertEquals("John", company.getEmployee().getFirstName());
assertEquals(1, company.getEmployee().getId());