# 春豆简介 > 原文: [https://javatutorial.net/introduction-to-spring-bean](https://javatutorial.net/introduction-to-spring-bean) 在本教程中,您将学习什么是 Sping Bean 以及如何使用它。 ![spring-featured-image](img/d2f73752d8ae931b119dec1eac866973.jpg) ## 什么是春豆? Bean 是构成应用程序的对象,并由 Spring IoC 容器管理。 [Spring Framework 文档](https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-introduction)的正式定义是: 在 Spring 中,构成应用程序主干并由 Spring IoC 容器管理的对象称为 Bean。 Bean 是由 Spring IoC 容器实例化,组装和以其他方式管理的对象。 如果您不熟悉 Spring IoC 容器,强烈建议您在处单击[。 您将被重定向到我撰写的有关该主题的文章。](https://javatutorial.net/java-spring-ioc-container-example) bean 的定义包含称为**配置元数据的内容。** 容器需要知道如何创建 Bean,Bean 的生命周期详细信息以及 Bean 的依赖关系。 ## 如何声明一个 Bean? 我们可以简单地通过使用@Bean 注解来声明一个 bean。 声明带有@Bean 注解的方法的示例: ```java @Configuration public class DemoConfig{ @Bean public String demoService() { return "Hello World!"; } } ``` 值得一提的是,当 JavaConfig 遇到@Bean 方法时,它将执行该方法并将返回值注册为 BeanFactory 中的 bean。 ### 域类 假设我们有一个名为 Company 的类,该类具有一个将 Employee 实例分配给实例变量的构造函数。 它还具有该员工的相应的 setter 和 getter 方法。 **Company.java** ```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; } } ``` 现在,让我们看看每个员工的结构: ```java 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 对象作为构造函数参数传递。 像这样: ```java Emplyoee employee = new Employee(1, "John", "Smith"); Company company = new Company(employee); ``` 这是通常的做法。 这种方法有什么问题? 想象一下,如果我们有数百堂课。 这将很难管理,甚至可能无法管理。 由于这个问题,我们有控制反转。 对象可以从 IoC 容器中检索其依赖关系,而不必自己构造依赖关系。 让我们看看如何通过包含本文的主要主题@Bean 来改进上述示例。 **AppConfig.java** ```java @Configuration @ComponentScan(basePackageClasses = Company.class) public class AppConfig { @Bean public Employee getEmployee() { return new Eployee(1, "John", "Smith"); } } ``` 现在我们已经编写了配置类,我们需要创建 AnnotationConfigApplicationContext 类的实例: ```java ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class); ``` 现在完成! 我们已经使 IoC 容器初始化了 bean。 还有另一件事要做。 检查是否正确创建了 bean。 为此,只需实例化一个 Company 实例,然后我们可以使用 **assertEquals** 方法检查更正。 ```java Company company = context.getBean("company", Company.class); assertEquals("John", company.getEmployee().getFirstName()); assertEquals(1, company.getEmployee().getId()); ```