当前位置: 首页 > web >正文

56、原生组件注入-原生注解与Spring方式注入

56、原生组件注入-原生注解与Spring方式注入

在Spring Boot中,可以通过两种方式将原生的Servlet、Filter和Listener组件注入到应用程序中:**使用原生注解**和**使用Spring方式**。

### 一、使用原生注解注入

#### 1. 原理

通过在组件类上使用`@WebServlet`、`@WebFilter`和`@WebListener`等注解,并配合`@ServletComponentScan`注解,Spring Boot会自动扫描并注册这些原生组件。

#### 2. 步骤

- **启用组件扫描**:在Spring Boot启动类上添加`@ServletComponentScan`注解,指定需要扫描的包路径。

  ```java

  @SpringBootApplication

  @ServletComponentScan(basePackages = "com.example.components")

  public class MyApplication {

      public static void main(String[] args) {

          SpringApplication.run(MyApplication.class, args);

      }

  }

  ```

- **创建原生组件**

  - **Servlet**

    ```java

    @WebServlet(urlPatterns = "/my-servlet")

    public class MyServlet extends HttpServlet {

        @Override

        protected void doGet(HttpServletRequest request, HttpServletResponse response)

                throws ServletException, IOException {

            // 处理请求

        }

    }

    ```

  - **Filter**

    ```java

    @WebFilter(urlPatterns = "/*")

    public class MyFilter implements Filter {

        // 实现过滤逻辑

    }

    ```

  - **Listener**

    ```java

    @WebListener

    public class MyListener implements ServletContextListener {

        // 监听ServletContext事件

    }

    ```

### 二、使用Spring方式注入

#### 1. 原理

通过创建配置类,使用`ServletRegistrationBean`、`FilterRegistrationBean`和`ServletListenerRegistrationBean`等类,将原生组件注册为Spring管理的Bean。

#### 2. 步骤

- **创建配置类**

  ```java

  @Configuration

  public class MyComponentConfig {

  

      @Bean

      public ServletRegistrationBean myServlet() {

          MyServlet servlet = new MyServlet();

          return new ServletRegistrationBean(servlet, "/my-servlet");

      }

  

      @Bean

      public FilterRegistrationBean myFilter() {

          MyFilter filter = new MyFilter();

          return new FilterRegistrationBean(filter, myServlet());

      }

  

      @Bean

      public ServletListenerRegistrationBean myListener() {

          MyListener listener = new MyListener();

          return new ServletListenerRegistrationBean(listener);

      }

  }

  ```

- **创建原生组件**

  不需要添加`@WebServlet`、`@WebFilter`和`@WebListener`注解,作为普通的Java类。

### 三、两种方式的区别

#### 1. 原生注解方式

- **优点**:

  - 简单直接,符合Servlet规范。

  - 组件与Spring解耦,可独立使用。

- **缺点**:

  - 无法利用Spring的依赖注入功能,组件中无法直接注入Spring管理的Bean。

#### 2. Spring方式

- **优点**:

  - 可以利用Spring的依赖注入,方便在组件中使用其他Spring Bean。

  - 便于统一管理和配置。

- **缺点**:

  - 配置相对复杂,需要编写额外的配置类。

### 四、选择建议

- 如果组件不需要依赖注入,且希望与Spring解耦,建议使用**原生注解方式**。

- 如果组件需要依赖注入,或者需要统一管理,建议使用**Spring方式**。

通过以上两种方式,可以根据实际需求灵活地将原生Servlet、Filter和Listener组件注入到Spring Boot应用程序中。

http://www.xdnf.cn/news/13810.html

相关文章:

  • 录制mp4 rospy
  • 数字人分身系统源码开发功能深度解析
  • 基于算力魔方与PP-OCRv5的OpenVINO智能文档识别方案
  • CSS实现元素撑满剩余空间的5种方法
  • Linux启动流程和内核管理自我总结
  • 杭州公司一面java题目和解答
  • 2025最新版使用VSCode和CMake图形化编译调试Cuda C++程序(保姆级教学)
  • IOT集群扩容实践:问题剖析与解决策略
  • Vue 3.6前瞻:响应式性能革命与Vapor模式展望
  • c#.net code httpPost请求,携带文件
  • 更进一步深入的研究ObRegisterCallBack
  • Kotlin 协程与 ViewModel 的完美结合
  • Rust 学习笔记:处理任意数量的 future
  • SQL进阶之旅 Day 28:跨库操作与ETL技术
  • 【C++】入门题目之定义Dog类
  • 三大能力升级,为老项目重构开辟新路径
  • [SPDM]SPDM 证书链验证过程详解
  • linux安装阿里DataX实现数据迁移
  • 组合边缘提取和亚像素边缘提取
  • word表格批量转excel,提取表格数据到excel
  • 企业签名分发跟应用商城分发有什么区别
  • mysql 的卸载- Windows 版
  • 人工智能100问☞第46问:AI是如何“学习”的?
  • VR百科:实景三维重建
  • Java实现国密算法
  • windows下tokenizers-cpp编译
  • FPGA基础 -- 什么是 Verilog 的模块(`module`)
  • 再现重大BUG,微软紧急撤回Win 11六月更新
  • Karate整合PlayWright方式之playWright Driver
  • Vulkan学习笔记4—图形管线基础