Web开发|SpringBoot-Bean

发布时间 2023-07-08 19:10:41作者: 跪求个offer

起因:经常在Config文件里看见Bean的存在,所以开始探究Bean的概念还使用方法。

原文来自:https://gustavopeiretti.com/spring-boot-bean-annotation/#:~:text=What%20is%20%40Configuration%20in%20Spring,other%20parts%20of%20the%20application.


 

在Spring Boot中,@Bean是一个方法级注解,用于声明一个Bean并将其注册到Spring容器。

什么是Spring Boot中的@Configuration?
在Spring Boot中,@Configuration注解用来表示一个类包含一个或多个Bean定义。

Bean是一个由Spring框架管理的object,可用于向应用程序的其他部分提供服务或功能。

当一个类被@Configuration注解时,它被视为Bean定义的来源,而该类中任何被@Bean注解的方法都将被用来创建和配置Bean。

 


What is a Bean in Spring Boot?

Bean是一个由Spring框架管理的object。

它是由Spring容器创建和管理的,Bean可以用来封装并向应用程序中的其他组件提供服务、实用程序和功能。

@Bean是一个annotation,用于将一个方法声明为Bean,因此,要在Spring Boot中创建一个Bean,你只需用@Bean来注解一个方法。

该方法应该返回一个你想在Spring容器中注册为Bean的对象。然后,Spring容器将管理Bean的生命周期,并根据需要将其注入其他组件中。

下面是一个如何使用@Bean注解在Spring Boot中定义Bean的例子。请注意,这个类是用@Configuration注解的,所以,我们可以在那里创建@Bean。

@Configuration
public class AppConfig {

    @Bean
    public MultiplierService multiplier() {
        return new MultiplierService(2);
    }

}

在这个例子中,MultiplierService是一个提供其他组件可能使用的一些服务的类。multiplier()方法被注解为@Bean,这告诉Spring把它当作一个Bean。当Spring容器启动时,它将调用这个方法来创建一个新的MultiplierService的实例(instance)。这个实例将由Spring管理,并可以被注入到其他依赖它的组件中。

请注意,@Bean注解是在@Configuration类中使用的,这是一种特殊类型的Spring组件,定义了应用程序的配置信息。

This is de MultiplierService class that we want to add like a Bean in our Configuration.

public class MultiplierService {

    private final int multiplier;

    public MultiplierService(int multiplier) {
        this.multiplier = multiplier;
    }

    public int multiply(int value) {
        return value * multiplier;
    }

}

 


How to use a Bean we have created

你可以通过自动连接到另一个类或组件来使用你所创建的Bean。

下面是一个将 "MultiplierService "bean自动连接到我们的 "AppService "的例子:

@Service
public class AppService {

    private final MultiplierService multiplierService;

    public AppService(@Autowired MultiplierService multiplierService) {
        this.multiplierService = multiplierService;
    }

    public int calculate(int aValue) {
        return multiplierService.multiply(aValue);
    }

}

注意:实际上可以省略@Autowired,因为到目前为止我们只有一个定义的Bean,而且如果@Autowired不存在,Spring会寻找一个满足构造函数的Bean。


How to give a name to a Bean

可以通过为@Bean注解提供一个名字来给Bean命名。这将被用作Spring容器中Bean的名称。

@Bean(name= "multiplierService")
public MultiplierService multiplier() {
    return new MultiplierService(2);
}

How to call a Bean by its name?

在Spring Boot中,可以使用@Qualifier注解来调用具有特定名称的Bean。

当有多个相同类型的Bean时,或者只是当我们想特别声明要使用的Bean时,@Qualifier注解被用来指定要使用的Bean的名字。

@Service
public class AppService {

    private final MultiplierService multiplierService;

    public AppService(@Autowired @Qualifier("multiplierService") MultiplierService multiplierService) {
        this.multiplierService = multiplierService;
    }

    public int calculate(int aValue) {
        return multiplierService.multiply(aValue);
    }

}

 


What is the cycle of life of the @Bean

在这个例子中,@Bean方法被定义在一个@Configuration类中。

1- 然后Bean定义被注册到Spring容器中,容器对Bean进行实例化和初始化

2- Spring注入Bean所需的任何依赖关系。

3- Init method is called.。

3- 一旦Bean被完全初始化,它就可以在应用程序中使用了。

4- 当应用程序关闭或Bean被容器销毁时,@Bean注解中指定的任何destroy方法将被调用。

ConditionalOnProperty annotation with Spring ‘Beans’

@ConditionalOnProperty annotation is used to conditionally create a Spring bean depending on the configuration of a property.

 @ConditionalOnProperty(name = "sender.sms", havingValue = "true")
    @Bean(name = "senderMessagesSms")
    public SenderMessages senderMessagesSms() {
        return new SenderMessagesSms();
    }

    @ConditionalOnProperty(name = "sender.sms", havingValue = "false")
    @Bean(name = "senderMessagesEmail")
    public SenderMessages senderMessagesEmail() {
        return new SenderMessagesEmail();
    }

总结
这是对我们所讲内容的总结:

在Spring Boot中,@Bean是一个方法级注解,用于声明一个Bean并将其注册到Spring容器中。
@Bean方法必须在@Configuration类中定义,它通常会返回一个你想在应用中作为Bean使用的类的实例。
你可以选择使用@Bean注解的name属性为Bean指定一个名字。
你还可以使用@Bean注解的value属性为Bean指定一个别名数组。
你可以使用依赖性注入将一个@Bean注入到另一个类或组件中,这样你就可以在你的应用程序中使用该Bean。
你可以使用@Bean注解的initMethod和destroyMethod属性来指定当Bean被实例化和销毁时要调用的方法。
Spring Boot中@Bean的生命周期包括注册、实例化和初始化、依赖注入和最终销毁。
如果你需要在某些条件下创建一个Bean,请使用ConditionalOnProperty注解。
总之,@Bean是Spring Boot中一个强大的注解,它允许你以直接和直观的方式来声明Bean。你可以通过在你的@Configuration类中创建@Bean方法,在你的应用程序中注册和使用你的类的实例作为Bean,你可以使用Spring的依赖注入架构来有效地管理你的组件的依赖关系。