@ConditionalOnWebApplication 作用

写在@ControllerAdvice中

@ConditionalOnWebApplication 是Spring Framework中的一个条件注解,用于根据当前应用程序是否是一个Web应用程序来决定是否创建一个bean或者配置一个类。这个注解在Spring Boot应用程序中非常有用,特别是在需要根据应用程序环境加载特定配置或bean的场景下。

主要功能

Web特定配置:当应用程序需要根据是否是Web应用程序来加载特定的配置或bean时,可以使用@ConditionalOnWebApplication来进行条件化配置。

Web和非Web环境兼容性:在一个库或模块中,可能会同时支持Web和非Web环境,可以利用该注解来分别适配不同的环境。

使用示例

假设有一个Spring Boot应用程序,我们希望根据当前应用程序是否是Web应用程序来创建不同的bean:

复制代码
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.boot.autoconfigure.condition.ConditionalOnWebApplication;
@Configuration
@ConditionalOnWebApplication
public class WebConfiguration {
   @Bean
   public MyWebBean myWebBean() {
       // 创建一个Web应用程序专用的bean
       return new MyWebBean();
   }
}
@Configuration
@ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET)
public class ServletConfiguration {
   @Bean
   public MyServletBean myServletBean() {
       // 如果是Servlet类型的Web应用程序,则创建一个特定的Servlet bean
       return new MyServletBean();
   }
}

在上面的示例中:

WebConfiguration 类使用了 @ConditionalOnWebApplication 注解,这意味着其中的 myWebBean 方法只有在当前应用程序是Web应用程序时才会创建。

ServletConfiguration 类使用了 @ConditionalOnWebApplication(type = ConditionalOnWebApplication.Type.SERVLET) 注解,这意味着其中的 myServletBean 方法只有在当前应用程序是Servlet类型的Web应用程序时才会创建。

注意事项

type属性:@ConditionalOnWebApplication注解可以通过type属性来指定具体的Web应用程序类型,包括Type.SERVLET(传统的Servlet应用程序)和Type.REACTIVE(响应式Web应用程序)。如果未指定type属性,默认情况下,@ConditionalOnWebApplication表示适用于任何类型的Web应用程序。

条件不满足时:当条件不满足时,与@ConditionalOnWebApplication注解关联的bean将不会被创建。

通过使用@ConditionalOnWebApplication注解,可以有效地控制Spring Boot应用程序中bean的加载顺序和条件,从而提高应用程序的灵活性和性能。

相关推荐
qq_406981031 小时前
c++ lamda(三)Lambda表达式
java·前端·c++
头发还在的女程序员1 小时前
Java在线租房系统源码解析:Spring Boot+Vue 3+UniApp房源管理与预约看房方案
java·vue.js·spring boot·租房小程序·租房系统·租房软件
FYKJ_20102 小时前
springboot同人周边订单管理系统48955-计算机毕业设计、课程设计
java·javascript·vue.js·spring boot·django·php·课程设计
Flynn Liang2 小时前
LLM 应用安全:Prompt 注入、越权与输入输出护栏
java·人工智能·大模型·langchain4j·llm 安全·prompt 注入·guardrail
特立独行的猫A8 小时前
用仓颉语言 cj-tauri 框架,五分钟给娃做了个鸿蒙形近字游戏
java·后端·python
budingxiaomoli15 小时前
Spring统一功能处理
java·后端·spring
Flynn Liang16 小时前
可观测性与成本治理:一次对话的 17 个观测点
java·langchain·可观测性·micrometer·langchain4j·token 成本·llm 监控
金銀銅鐵16 小时前
带您看懂字节码指令(三):同一行加法,为什么有四种指令
java·jvm
文丑颜不良啊20 小时前
LeetCode2821~2840题目解析
java·leetcode
apcipot_rain21 小时前
C++转Java日记(10)
java·开发语言