在本教程中,您将学习什么是 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注解的方法的示例:
@Configurationpublic class DemoConfig{@Beanpublic 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 {@Beanpublic 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());
