首页 > 其他分享 >Web开发|SpringBoot-Bean

Web开发|SpringBoot-Bean

时间:2023-07-08 19:11:06浏览次数:43  
标签:Web SpringBoot Spring MultiplierService Bean 注解 multiplierService public

起因:经常在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的依赖注入架构来有效地管理你的组件的依赖关系。

 

标签:Web,SpringBoot,Spring,MultiplierService,Bean,注解,multiplierService,public
From: https://www.cnblogs.com/fangleSea/p/17537689.html

相关文章

  • web中间件漏洞之(3)fastjson反序列化漏洞
    引言fastjson可以将Java对象序列化为json格式,也可将json反序列化为Java对象。在请求包里面中发送恶意的json格式payload,fastjson在处理json对象时使用了autotype机制,允许在反序列化时通过@type指定反序列化的类,调用指定类的set和get方法。攻击者可以通过rmi或ldap服务,将ldap......
  • Web漏洞扫描(AWVS)
    AWVS原理是基于漏洞匹配方法,通过网络爬虫测试你的网站安全,检测流行安全漏洞。AWVS可以通过SQL注入、XSS、目录遍历、代码执行等漏洞来审核web应用程序的安全性并输出扫描报告。相对于手动测试的复杂和耗时,它能快速的发现漏洞来提高效率和漏洞覆盖面。 安装与启动:这个AWVS并......
  • Spring整合web环境(Servlet)
    前提:Spring系列坐标版本统一,否则会出现版本问题发布之前先进行打包,可以暴露一些代码配置上的问题,避免出现找不到资源的问题1.创建Servlet @WebServlet注解用于配置Servlet,相当于web.xml中的以下代码<servlet><servlet-name>AccountServlet</servlet-name><servlet-c......
  • 微信小程序websocke协议wss用nginx反向代理
    map$http_upgrade$connection_upgrade{defaultupgrade;''close;}upstreamwebsocket{serveryourip:port;}server{listen443;server_namexxxx.com;sslon;ssl_certificate/xx/xx/cert.crt;ssl_certificate_key/xx/xx/cert.key;......
  • SpringBoot 项目不加载 application.properties 配置文件
    yml或者properties文件没有被扫描到,需要在pom文件中<build></build>添加如下内容来保证文件都能正常被扫描到并且加载成功。<resources><resource><directory>src/main/java</directory><includes><include>**/*.yml</include......
  • Java技术分享:SpringBoot+mysql+...
    放个效果图: 准备项目首先在MySql控制台输入一下sql语句创建student数据库和student。createdatabsestudent;usestudent;CREATETABLE`student`(`stu_id`bigint(20)NOTNULL,`stu_name`varchar(45)DEFAULTNULL,`stu_sex`varchar(6)DEFAULTNUL......
  • springboot 常见面试题
    1.什么是SpringBoot?它的主要特点是什么?-SpringBoot是一个基于Spring框架的开源框架,用于简化Spring应用程序的开发和部署。-其主要特点包括自动配置、约定优于配置、快速开发、独立运行、简化部署等。2.SpringBoot如何简化Spring应用程序的开发和部署?-SpringB......
  • 通过在本地项目中添加服务引用访问外部WebService项目接口
    访问外部WebService项目接口的第二种方式就是通过在本地项目中添加服务引用。以下学习验证过程,通过在本地建立一个winfrom项目,通过按钮点击,触发调用接口,执行代码处理逻辑,并在文本显示区域显示最终拿回的数据。(1)在Visualstudio新建一个winfrom项目: (2)右键项目,添加服务应用,填......
  • SpringBoot3 学习笔记(开始配置)
    一、使用工具IntelliJ,下载JDK20https://www.oracle.com/java/technologies/downloads/二、采用SpringInitializr新建项目, 三、勾选web和lombok四、点Finish后等待新建目录如下,删掉无用的目录和文件:五、最终如下: 六、右键com.wind,新建controller.HellWorldController......
  • WEB API 添加jwt认证后,跨域失效问题
    WEBAPI添加jwt认证后,跨域失效问题跨域配置策略如下://添加跨域策略builder.Services.AddCors(options=>{options.AddPolicy("CorsPolicy",opt=>opt.AllowAnyOrigin().AllowAnyHeader().AllowAnyMethod().WithExposedHeaders("......