[SpringBoot2]原生组件注入_原生注解与Spring方式注入

1、使用Servlet API

@ServletComponentScan(basePackages = “com.atguigu.admin”)
:指定原生Servlet组件都放在那里
@WebServlet(urlPatterns ="/my"):效果:直接响应,没有经过Spring的拦截器?
@WebFilter(urlPatterns={"/css/","/images/"})
@WebListener

@ServletComponentScan(basePackages = "com.atguigu.admin")
@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)public class Boot05WebAdminApplication {public static void main(String[] args) {SpringApplication.run(Boot05WebAdminApplication.class, args);}}
@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("66666");}
}
@Slf4j
@WebFilter(urlPatterns = {"/css/*","/images/*"})
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("init finished");}@Overridepublic void destroy() {log.info("destroy finished");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("myFilter work");filterChain.doFilter(servletRequest,servletResponse);}
}
@Slf4j
@WebListener
public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {log.info("MyServletContextListener init finished");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {log.info("MyServletContextListener destory finished");}}

2、使用RegistrationBean

@Slf4j
//@WebFilter(urlPatterns = {"/css/*","/images/*"})
public class MyFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {log.info("init finished");}@Overridepublic void destroy() {log.info("destroy finished");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {log.info("myFilter work");filterChain.doFilter(servletRequest,servletResponse);}
}//=======================================================//@WebServlet(urlPatterns = "/my")
public class MyServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.getWriter().write("66666");}}//=================================================================@Slf4j
//@WebListener
public class MyServletContextListener implements ServletContextListener {@Overridepublic void contextInitialized(ServletContextEvent sce) {log.info("MyServletContextListener init finished");}@Overridepublic void contextDestroyed(ServletContextEvent sce) {log.info("MyServletContextListener destory finished");}}
@Configuration(proxyBeanMethods = true)
public class MyRegistConfig {@Beanpublic ServletRegistrationBean myServlet(){MyServlet myServlet = new MyServlet();return new ServletRegistrationBean(myServlet,"/my","/my02");}@Beanpublic FilterRegistrationBean myFilter(){MyFilter myFilter = new MyFilter();//      方式一:
//        return new FilterRegistrationBean(myFilter,myServlet());//方式二:FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean(myFilter);filterRegistrationBean.setUrlPatterns(Arrays.asList("/my","/css/*"));return filterRegistrationBean;}@Beanpublic ServletListenerRegistrationBean myListener(){MyServletContextListener myServletContextListener = new MyServletContextListener();return new ServletListenerRegistrationBean(myServletContextListener);}}

注意:

@Configuration(proxyBeanMethods = true)

保证依赖的组件始终是单实例的

如果我们写成

@Configuration(proxyBeanMethods = false)

说明我们当前类,每次调用一次myServlet方法,就会创建一个新的MyServlet,有可能导致我们一调用下面的过滤器方法就会创建一个新的MyServlet,会导致我们容器中有很多冗余的其他对象!

return new FilterRegistrationBean(myFilter,myServlet());

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308730.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将终结点图添加到你的ASP.NET Core应用程序中

在本文中,我将展示如何使用DfaGraphWriter服务在ASP.NET Core 3.0应用程序中可视化你的终结点路由。上面文章我向您演示了如何生成一个有向图(如我上篇文章[译]使用DOT语言和GraphvizOnline来可视化你的ASP.NETCore3.0终结点01中所示)&#x…

再见,RabbitMQ,你好,Kafka!

容器、Kubernetes、DevOps、微服务、云原生,这些技术名词的频繁出现,预兆着新的互联网技术时代的到来,大数据高并发将不再遥远,而是大部分项目都必须具备的能力了,而消息队列是必备的了。成熟的消息队列产品很多&#…

[SpringBoot2]定制化原理_SpringBoot定制化组件的几种方式

定制化原理 定制化的常见方式 ● 修改配置文件; ● xxxxxCustomizer; ● 编写自定义的配置类 xxxConfiguration; Bean替换、增加容器中默认组件;视图解析器 ● Web应用 编写一个配置类实现 WebMvcConfigurer 即可定制化web功能&…

[SpringBoot2]数据访问_数据库场景的自动配置分析和整合测试

数据访问 1、导入jdbc场景 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jdbc</artifactId></dependency>数据库驱动&#xff1f; 为什么导入JDBC场景&#xff0c;官方不导入驱动&…

【视频回放与课件】搭上AI快车-在线公益课堂:基于移动应用的人工智能开发...

今天&#xff0c;受广州图书馆邀请&#xff0c;通过腾讯会议推出搭上AI快车系列在线公益讲座第三讲《基于移动应用的人工智能开发》&#xff0c;本次课程实时参与参与直播互动人数超过300人&#xff0c;虽然课程10点钟才正式开始&#xff0c;但是9点已经有许多小伙伴已经进来直…

[Spring5]Spring框架概述

Spring框架概述 1.Spring是轻量级的开源的JavaEE框架 2.Spring可以解决企业应用开发的复杂性 3.Spring有两个核心部分&#xff1a;IOC和Aop a.IOC&#xff1a;控制反转&#xff0c;把创建对象过程交给Spring进行管理 b.Aop&#xff1a;面向切面&#xff0c;不修改源代码进…

dotNET:怎样处理程序中的异常(理论篇)?

平时在软件开发的过程中&#xff0c;首先是要保证功能可以正常运行&#xff0c;满足业务需求&#xff0c;除此之外&#xff0c;还需要考虑代码在异常的时候怎么处理&#xff0c;让程序能够健壮地运行。正确合理地处理异常可以减少程序的 Bug、保证代码质量&#xff0c;当然也不…

[Spring5]IOC容器_底层原理

IOC的概念和原理 什么是IOC 1.控制反转&#xff0c;把对象创建和对象之间的调用过程&#xff0c;交给Spring进行管理 2.使用IOC目的&#xff1a;为了耦合度减低 IOC底层原理 xml解析工厂模式反射 底层原理示例图 目的&#xff1a;将耦合度降低到最低限度 IOC过程 1.xml…

使用Azure DevOps Pipeline实现.Net Core程序的CI

上次介绍了Azure Application Insights&#xff0c;实现了.net core程序的监控功能。这次让我们来看看Azure DevOps Pipeline功能。Azure DevOps Pipeline 是Azure DevOps里面的一个组件&#xff0c;对于12个月试用账号同样永久免费。持续集成CI持续集成指的是&#xff0c;频繁…

[Spring5]IOC容器_Bean管理XML方式_创建对象_set注入属性and有参构造注入属性

IOC操作 Bean管理 什么是Bean管理 1.Bean管理指的是两个操作&#xff1a; a.Spring创建对象 b.Spring注入属性 2.Bean管理操作有两种方式 a.基于xml配置文件方式实现 b.基于注解方式实现 IOC操作Bean管理&#xff08;基于xml方式&#xff09; 1.基于xml方式创建对象 &…

Blazor带我重玩前端(四)

布局Blazor中的布局和MVC中的布局是类似的。创建布局新建一个Razor页面&#xff0c;所有新增的布局都要继承LayoutComponentBase&#xff0c;同时标识自定义内容的输出位置&#xff0c;即标识Body的位置。如图所示&#xff1a;应用布局我们修改一下index.razor页面中的代码&…

[Spring5]IOC容器_Bean管理XML方式_p名称空间注入

iii.第三种注入方式&#xff1a;p名称空间注入 bean: package com.atguigu.spring;/*** 演示使用set方法进行注入属性*/ public class Book {private String bname;private String bauthor;public String getBname() {return bname;}public void setBname(String bname) {thi…

kubernetes+Azure DevOps实现.Net Core项目的自动化部署均衡负载

1. 前言前前后后学习kubernetes也有一个来月了&#xff0c;关于kubernetes的博客也写了有十多篇。但是技术如果无法落地到实际的应用场景终归是纸上谈兵&#xff0c;所以就有了这一出&#xff1a;通过结合kubernetes和azure devops实现项目的CI/CD以及均衡负载写完这篇后kubern…

ASP.NET Core 消息传递:MediatR

MediatR[1] 是参考中介者模式实现的一个 .NET 工具类库&#xff0c;支持在进程内以单播或多播的形式进行消息传递&#xff0c;通过使用 MediatR 可实现消息的发送和处理充分解耦。在介绍 MediatR 之前&#xff0c;先简单了解下中介者模式。中介者模式主要是指定义一个中介对象来…

[Spring5]IOC容器_Bean管理XML方式_注入其他类型属性

xml注入其他属性 bean: package com.atguigu.spring;/*** 演示使用set方法进行注入属性*/ public class Book {private String bname;private String bauthor;private String address;public Book(String address) {this.address address;}public String getBname() {return…

ERP平台的自动化测试技术实践

源宝导读&#xff1a;ERP是“业务密集”的大型复杂软件&#xff0c;而且对于业务逻辑与数据的精确度要求几乎是零容忍&#xff0c;其质量保障的挑战很大。本文将介绍ERP平台通过自动化测试保障质量的技术实践。一、自动化测试概念介绍测试金字塔原理1.1、测试的成本UI自动化依赖…

[Spring5]IOC容器_Bean管理XML方式_注入集合类型属性

xml注入集合属性 1.注入数组类型属性 2.注入List集合类型属性 3.注入Map集合类型属性 &#xff08;1&#xff09;创建类&#xff0c;定义数组&#xff0c;list&#xff0c;map&#xff0c;set类型属性&#xff0c;生成对应set方法 package com.atguigu.collectiontype;imp…

Logging with ElasticSearch, Kibana, ASP.NET Core and Docker

“好久不见&#xff0c;前两周经历了人生第一次"伪牛市"&#xff0c;基金和股市大起大落&#xff0c;更加坚信“你永远赚不到超出你认知范围之外的钱,除非靠着运气”&#xff0c;老韭菜诚不欺我也。当能力与野心不匹配&#xff0c;只能多看书&#xff0c;收割那些不求…

[Spring5]IOC容器_Bean管理_工厂Bean

IOC操作Bean管理&#xff08;FactoryBean&#xff09; 1.Spring有两种类型bean&#xff0c;一种普通bean&#xff0c;另外一种工厂bean&#xff08;FactoryBean&#xff09; 2.普通bean&#xff1a;在配置文件中定义bean类型就是返回类型 3.工厂bean&#xff1a;在配置文件定…

Redis 6.0 新特性 ACL 介绍

Redis 6.0 新特性 ACL 介绍Intro在 Redis 6.0 中引入了 ACL&#xff08;Access Control List) 的支持&#xff0c;在此前的版本中 Redis 中是没有用户的概念的&#xff0c;其实没有办法很好的控制权限&#xff0c;redis 6.0 开始支持用户&#xff0c;可以给每个用户分配不同的权…