Spring:getBean方法做什么?

时间:2017-10-08 20:26:53

标签: java spring

我正在阅读以下文章:http://www.concretepage.com/spring/spring-autowired-annotation-example-with-setter-method-field-and-constructor-using-xml-and-java-configuration

我在那里找到了以下代码片段:

package com.concretepage;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import com.concretepage.bean.Company;
import com.concretepage.bean.Employee;
@Configuration
public class AppConfig {
    @Bean
    public Company getCompany() {
        Company company = new Company();
        company.setCompName("ABCD Ltd");
        company.setLocation("Varanasi");
        return company;
    }
    @Bean
    public Employee getEmployee() {
        return new Employee();
    }
} 



package com.concretepage;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import com.concretepage.bean.Employee;
public class SpringDemo {
   public static void main(String[] args) {
       AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext();
       ctx.register(AppConfig.class);
       ctx.refresh();
       Employee employee = ctx.getBean(Employee.class);
       System.out.println("Company Name:"+ employee.getCompany().getCompName());
       System.out.println("Location:"+ employee.getCompany().getLocation());
       ctx.close();
   }
} 

我想得到关于该行的解释:

       Employee employee = ctx.getBean(Employee.class);

'ctx'将AppConfig类作为参数。 AppConfig类包括两个方法getCompany和getEmployee。我不明白的是,如果我们有方法'getEmployee'返回一个新的'Employee'对象,为什么我们必须使用'ctx.getBean(Employee.class)'做同样的事情?

此外,在方法'getCompany'和'getEmployee'上使用注释'@Bean'有什么好处?

2 个答案:

答案 0 :(得分:0)

Spring的ApplicationContext使用@Bean注释来创建返回的bean。默认情况下,仅创建一个实例。豆是单身人士。

每次调用它时,使用Employee employee = ctx.getBean(Employee.class);都会返回相同的对象。

所以回答你的问题:

  1. 如果我们有方法'getEmployee'返回一个新的'Employee'对象,为什么我们必须使用'ctx.getBean(Employee.class)'?
    因为这是Spring的应用程序上下文初始化Bean的方式。它运行您的getEmployee()方法并创建一个Bean。

  2. 在方法'getCompany'和'getEmployee'上使用注释'@Bean'有什么好处?
    好吧,如果你不使用{{1 Spring不知道你想要一个Bean。


  3. 是的..阅读一些Spring文档还有很长的路要走。

答案 1 :(得分:-1)

关于使用@Bean的好处:看看它:https://docs.spring.io/spring-boot/docs/current/reference/html/using-boot-spring-beans-and-dependency-injection.html

D.I。 (依赖注入)概念是您首先需要理解的,而且您将能够看到如何使用/注入这些@Beans。