网站设计的目的和任务深圳建站哪家专业

news/2025/9/22 16:32:56/文章来源:
网站设计的目的和任务,深圳建站哪家专业,太原百度推广制作个性商城网站,番禺网站建设gzhchl目录 如何引入第三方库第三方库与当前项目Bean重复自定义自动配置类 自动配置类通常位于Spring Boot的自动配置模块中#xff0c;并且被标记为 Configuration类。这些类使用 Conditional注解来检查某些条件是否满足#xff0c;如果满足#xff0c;则创建和配置相关的bean。… 目录 如何引入第三方库第三方库与当前项目Bean重复自定义自动配置类 自动配置类通常位于Spring Boot的自动配置模块中并且被标记为 Configuration类。这些类使用 Conditional注解来检查某些条件是否满足如果满足则创建和配置相关的bean。这些条件可能包括检查类路径上是否存在特定的类、检查应用程序的属性设置、检查是否存在特定的bean等。 自动配置类还可用于自动配置各种常见的Spring组件和第三方库。这些自动配置类大大简化了应用程序的配置过程使得开发者可以更加专注于实现业务逻辑而不是花费大量时间在繁琐的配置上。 如何引入第三方库 看如下示例 package com.cys.spring.chapter16;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.ConfigurationClassPostProcessor; import org.springframework.context.annotation.Import; import org.springframework.context.support.GenericApplicationContext;public class TestAutoConfig {SuppressWarnings(all)public static void main(String[] args) {GenericApplicationContext context new GenericApplicationContext();context.registerBean(config, Config.class);context.registerBean(ConfigurationClassPostProcessor.class);context.refresh();for (String name : context.getBeanDefinitionNames()) {System.out.println(name);}System.out.println();System.out.println(context.getBean(Bean1.class));}Configuration // 本项目的配置类Import({AutoConfiguration1.class, AutoConfiguration2.class})static class Config {}Configuration // 第三方的配置类static class AutoConfiguration1 {Beanpublic Bean1 bean1() {return new Bean1(第三方);}}static class Bean1 {private String name;public Bean1() {}public Bean1(String name) {this.name name;}Overridepublic String toString() {return Bean1{ name name \ };}}Configuration // 第三方的配置类static class AutoConfiguration2 {Beanpublic Bean2 bean2() {return new Bean2();}}static class Bean2 {} }运行 config org.springframework.context.annotation.ConfigurationClassPostProcessor com.cys.spring.chapter16.TestAutoConfig$AutoConfiguration1 bean1 com.cys.spring.chapter16.TestAutoConfig$AutoConfiguration2 bean2Bean1{name第三方}首先在我们当前应用的配置类Config中使用Import({AutoConfiguration1.class, AutoConfiguration2.class})将模拟出的第三方的配置类AutoConfiguration1和AutoConfiguration2导入到了我们自己的应用程序中接着就可以使用他们俩的配置类中创建的Bean。 接着我们优化一下不把导入的类名写死在代码而是配合ImportSelector将其写在配置文件中文件名需要是src/main/resources/META-INF/spring.factories 配置文件内容 com.cys.spring.chapter16.TestAutoConfig$MyImportSelector\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration1,\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration2然后修改测试类如下 Configuration // 本项目的配置类 Import(MyImportSelector.class) // Import({AutoConfiguration1.class, AutoConfiguration2.class}) static class Config { }/*** 创建一个ImportSelector返回配置文件的类名*/ static class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {ListString names SpringFactoriesLoader.loadFactoryNames(MyImportSelector.class, null);return names.toArray(new String[0]);} }这样也是没问题的。 第三方库与当前项目Bean重复 如果第三方库与当前项目Bean重复默认是引入的第三方的先创建然后自己程序的再创建且后创建的可以覆盖前面的。 可以设置为不允许覆盖就会有Bean重复的报错设置方法如下 setAllowBeanDefinitionOverriding(false);修改后如下 public static void main(String[] args) {GenericApplicationContext context new GenericApplicationContext();// 如果有同名的Bean是否允许覆盖context.getDefaultListableBeanFactory().setAllowBeanDefinitionOverriding(false);context.registerBean(config, Config.class);context.registerBean(ConfigurationClassPostProcessor.class);context.refresh();for (String name : context.getBeanDefinitionNames()) {System.out.println(name);}System.out.println();System.out.println(context.getBean(Bean1.class));}运行后报错 Exception in thread main org.springframework.beans.factory.support.BeanDefinitionOverrideException: Invalid bean definition with name bean1 defined in com.cys.spring.chapter16.TestAutoConfig$Config: Cannot register bean definition [Root bean: class [null]; defined in com.cys.spring.chapter16.TestAutoConfig$Config] for bean bean1: There is already [Root bean: class [null]; defined in class path resource [com/cys/spring/chapter16/TestAutoConfig$AutoConfiguration1.class]] bound.意思就是无法注册TestAutoConfig C o n f i g 中的 b e a n 1 的 b e a n d e f i n i t i o n 因为在 T e s t A u t o C o n f i g Config中的bean1的 bean definition因为在TestAutoConfig Config中的bean1的beandefinition因为在TestAutoConfigAutoConfiguration1.class中已经存在。 实际生产中不建议这么做建议开启覆盖。 那么如果要调整注册 bean definition的顺序呢让自己程序的先注册第三方的后注册呢也可以但实际生产也不建议这么做。 真要修改的话可以创建ImportSelector时实现DeferredImportSelector达到延迟注册的目的。如下 static class MyImportSelector implements DeferredImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {ListString names SpringFactoriesLoader.loadFactoryNames(MyImportSelector.class, null);return names.toArray(new String[0]);}}自定义自动配置类 在Springboot中自动配置通常使用EnableAutoConfiguration。源码如下 // // Source code recreated from a .class file by IntelliJ IDEA // (powered by FernFlower decompiler) //package org.springframework.boot.autoconfigure;import java.lang.annotation.Documented; import java.lang.annotation.ElementType; import java.lang.annotation.Inherited; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import org.springframework.context.annotation.Import;Target({ElementType.TYPE}) Retention(RetentionPolicy.RUNTIME) Documented Inherited AutoConfigurationPackage Import({AutoConfigurationImportSelector.class}) public interface EnableAutoConfiguration {String ENABLED_OVERRIDE_PROPERTY spring.boot.enableautoconfiguration;Class?[] exclude() default {};String[] excludeName() default {}; }他也是使用了Import注解去找spring.fatories文件中找AutoConfigurationImportSelector的key。AutoConfigurationImportSelectory中也有个selectImports其源码如下 public class AutoConfigurationImportSelector implements DeferredImportSelector, BeanClassLoaderAware, ResourceLoaderAware, BeanFactoryAware, EnvironmentAware, Ordered {private static final AutoConfigurationImportSelector.AutoConfigurationEntry EMPTY_ENTRY new AutoConfigurationImportSelector.AutoConfigurationEntry();private static final String[] NO_IMPORTS new String[0];private static final Log logger LogFactory.getLog(AutoConfigurationImportSelector.class);private static final String PROPERTY_NAME_AUTOCONFIGURE_EXCLUDE spring.autoconfigure.exclude;private ConfigurableListableBeanFactory beanFactory;private Environment environment;private ClassLoader beanClassLoader;private ResourceLoader resourceLoader;private AutoConfigurationImportSelector.ConfigurationClassFilter configurationClassFilter;public AutoConfigurationImportSelector() {}public String[] selectImports(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return NO_IMPORTS;} else {AutoConfigurationImportSelector.AutoConfigurationEntry autoConfigurationEntry this.getAutoConfigurationEntry(annotationMetadata);return StringUtils.toStringArray(autoConfigurationEntry.getConfigurations());}} }主要方法getAutoConfigurationEntry protected AutoConfigurationImportSelector.AutoConfigurationEntry getAutoConfigurationEntry(AnnotationMetadata annotationMetadata) {if (!this.isEnabled(annotationMetadata)) {return EMPTY_ENTRY;} else {AnnotationAttributes attributes this.getAttributes(annotationMetadata);ListString configurations this.getCandidateConfigurations(annotationMetadata, attributes);configurations this.removeDuplicates(configurations);SetString exclusions this.getExclusions(annotationMetadata, attributes);this.checkExcludedClasses(configurations, exclusions);configurations.removeAll(exclusions);configurations this.getConfigurationClassFilter().filter(configurations);this.fireAutoConfigurationImportEvents(configurations, exclusions);return new AutoConfigurationImportSelector.AutoConfigurationEntry(configurations, exclusions);} }进入方法getCandidateConfigurations protected ListString getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes) {ListString configurations SpringFactoriesLoader.loadFactoryNames(this.getSpringFactoriesLoaderFactoryClass(), this.getBeanClassLoader());Assert.notEmpty(configurations, No auto configuration classes found in META-INF/spring.factories. If you are using a custom packaging, make sure that file is correct.);return configurations; }他也是使用方法SpringFactoriesLoader.loadFactoryNames找配置类名称其中key是this.getSpringFactoriesLoaderFactoryClass()方法返回值 protected Class? getSpringFactoriesLoaderFactoryClass() {return EnableAutoConfiguration.class; }进入方法看到他最后找的类名为EnableAutoConfiguration的key。 根据这个我们在spring.factories中添加这个key: com.cys.spring.chapter16.TestAutoConfig$MyImportSelector\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration1,\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration2org.springframework.boot.autoconfigure.EnableAutoConfiguration\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration1,\ com.cys.spring.chapter16.TestAutoConfig.AutoConfiguration2并在配置类上加上EnableAutoConfiguration: package com.cys.spring.chapter16;import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory; import org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.DeferredImportSelector; import org.springframework.core.env.SimpleCommandLinePropertySource; import org.springframework.core.env.StandardEnvironment; import org.springframework.core.io.support.SpringFactoriesLoader; import org.springframework.core.type.AnnotationMetadata;import java.io.IOException;public class TestSelfAutoConfiguration {SuppressWarnings(all)public static void main(String[] args) throws IOException {AnnotationConfigServletWebServerApplicationContext context new AnnotationConfigServletWebServerApplicationContext();StandardEnvironment env new StandardEnvironment();env.getPropertySources().addLast(new SimpleCommandLinePropertySource(--spring.datasource.urljdbc:mysql://localhost:3306/test,--spring.datasource.usernameroot,--spring.datasource.passwordroot));context.setEnvironment(env);context.registerBean(config, Config.class);context.refresh();for (String name : context.getBeanDefinitionNames()) {String resourceDescription context.getBeanDefinition(name).getResourceDescription();if (resourceDescription ! null)System.out.println(name 来源: resourceDescription);}context.close();}Configuration // 本项目的配置类 // Import(MyImportSelector.class) // Import(AutoConfigurationImportSelector.class)EnableAutoConfigurationstatic class Config {Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {return new TomcatServletWebServerFactory();}}static class MyImportSelector implements DeferredImportSelector {Overridepublic String[] selectImports(AnnotationMetadata importingClassMetadata) {return SpringFactoriesLoader.loadFactoryNames(MyImportSelector.class, null).toArray(new String[0]);}}Configuration // 第三方的配置类static class AutoConfiguration1 {Beanpublic Bean1 bean1() {return new Bean1();}}Configuration // 第三方的配置类static class AutoConfiguration2 {Beanpublic Bean2 bean2() {return new Bean2();}}static class Bean1 {}static class Bean2 {} }运行后检查返现bean1和bean2

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

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

相关文章

有哪些网站适合大学生做兼职网站开发人员是干什么的

题目链接 BZOJ:https://www.lydsy.com/JudgeOnline/problem.php?id2655 Solution 设\(f_i\)表示长度为\(i\)的序列个数,\(g_{i,x}\)表示含有\(x\)的序列个数,注意这里不考虑顺序,顺序答案直接乘\(n!\)就好了。 首先很显然可以得到…

网站建设找 三尾狐wordpress首页添加图片不显示图片

原文合集地址如下,有需要的朋友可以关注 本文地址 合集地址 原理 在 Vue.js 中,$nextTick 方法的底层原理涉及 Vue 的更新队列以及浏览器的异步任务队列(微任务和宏任务)。它的主要目标是在下次 DOM 更新循环结束后执行回调函…

巨鹿网站制作广州有什么好玩的好吃的

摘要: PTS(Performance Testing Service)是web化的卓越的SaaS性能测试平台,具备强大的分布式压测能力,可方便的模拟海量用户的真实业务场景。PTS铂金版在功能上强调页面可视化编排,目前也在快速迭代中&…

day13-Trae之一键换脸APP开发03

今日内容 1 后端Django项目trae或者其他ai工具去编写项目时---》如果UI图不一样,写出来的,可能跟我的不一样 后端的代码,前端代码,每次写都会有差距Django后端项目---》Python的一个web框架----》学习成本挺高---》…

摩尔投票法

0、参考资料(讲解视频及博客等)本人水平有限,如有错误,恳请指正 讲解视频:【【算法】摩尔投票法】一、应用场景典型应用场景:在一个数组中,寻找出现次数超过总元素数一半的元素(即 “主元素”);也可扩展到寻…

基于STM32平台的ADS1292心电采集驱动程序

一、硬件连接方案 graph LRA[STM32F103] -->|SPI1| B[ADS1292]A -->|GPIO| BB -->|DRDY| C[STM32 EXTI]subgraph STM32SPI1_SCK --> GPIOA5SPI1_MISO --> GPIOA6SPI1_MOSI --> GPIOA7SPI1_CS -->…

C#开发的等待界面类库例子 - 开源研究系列文章

C#开发的等待界面类库例子 - 开源研究系列文章Posted on 2025-09-22 16:30 lzhdim 阅读(0) 评论(0) 收藏 举报 今天讲讲应用里的等待窗体的例子。在实际的使用中,有时候如果应用需要长时间的运行某个函数或…

青秀网站建设wordpress 无广告视频

创:18_3_2017修:20_3_2017 什么是前端?  --在浏览器中展示内容以及处理请求 什么是浏览器?   --一款能将网页内容展现给用户查看,并且让用户与网页交互的软件 什么是内核?   --渲染引擎,规…

搜索引擎有哪些网站沈阳网站建设本地化技术服务

二叉树 打算先来了解二叉树基础,都是简单题,目的是熟悉代码格式和解题基础思路。 1、二叉树最大深度 二叉树最大深度 方法一、深度搜索 直接用原函数做递归,比较简单 /*** Definition for a binary tree node.* struct TreeNode {* …

网站前台的网址公众号怎么开通商城

绕孔轴旋转的可无限旋转枪头以及送丝机是ETR堆焊系统的核心在传动米亏的帮助下,焊接电流、保护气、焊枪冷却专职和电气控制信号进行着不间断的工作。然而,如同所有复杂设备,该系统在使用过程中也可能遇到故障。因此,建议与子锐机器…

世界网站制作网站建设找金手指排名

对于ftp工具,你了解多少?其实一般人也接触不到这种软件。ftp工具主要是针对从事网站管理的工作人员比较有利的一款工具。可以帮助他们快速的解决工作中的问题。方便、简单、快捷又明了的解决问题。那ftp工具有哪些呢?接下来给大家推荐四款好用…

简述建设电子商务网站步骤写软文怎么接单子

目录 今日良言:关关难过关关过,步步难行步步行 一、单例模式 1.饿汉模式 2.懒汉模式 二、工厂模式 今日良言:关关难过关关过,步步难行步步行 一、单例模式 首先来解释一下,什么是单例模式。 单例模式也就是单个…

搭建自己的博客网站做网站推广书范法吗

思路&#xff1a;将以桥为分界的所有连通分支进行缩点&#xff0c;得到一颗树&#xff0c;求出树的直径。再用树上的点减去直径&#xff0c;再减一 #pragma comment(linker, "/STACK:1024000000,1024000000") #include<iostream> #include<cstdio> #incl…

学校微网站模板工信部网站黑名单

总结 本系列是机器学习课程的系列课程&#xff0c;主要介绍机器学习中图像文本检索技术。此技术把自然语言处理和图像处理进行了融合。 参考 2024年&#xff08;第12届&#xff09;“泰迪杯”数据挖掘挑战赛 图像特征提取&#xff08;VGG和Resnet特征提取卷积过程详解&…

番禺网站建设公司有哪些天津网约车

本文通过一个例子来介绍利用maven来构建一个多模块的jave项目。开发工具&#xff1a;intellij idea。 一、项目结构 multi-module-project是主工程&#xff0c;里面包含两个模块&#xff08;Module&#xff09;&#xff1a; web-app是应用层&#xff0c;用于界面展示&#xff…

承德建设企业网站国外著名的网站设计公司

Spring Boot 是由 Pivotal 团队提供的全新框架&#xff0c;其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置&#xff0c;从而使开发人员不再需要定义样板化的配置。我这里会分享一些学习Spring Boot的方法和干货&#xff0c;包括…

网站建设的快乐学编程的好处

随着信息技术与制造业的深度协调&#xff0c;作为企业发展的趋势&#xff0c;大中型制造企业需要拥抱信息化建设。通过运用信息技术和数字化运营&#xff0c;大中型制造企业的生产、设计、经营、管理、后续服务等都实现自动化、智能化。大中型制造企业信息化建设解决方案&#…

ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池

ProcessPoolExecutor VS ThreadPoolExecutor 进程池对比线程池 示例一: I/O 场景——10 个网页并发下载 + 实时进度 结果 多线程: 100%|██████████| 10/10 [00:07<00:00, 1.41it/s] 【多线程】I/O 并发…

深入解析MS12-020关键漏洞CVE-2012-0002:远程桌面协议的安全风险与缓解方案

本文详细分析了微软远程桌面协议(RDP)中的高危漏洞CVE-2012-0002,该漏洞允许未经认证的远程代码执行,影响所有Windows版本。文章提供了启用网络级认证(NLA)的临时缓解方案,并讨论了终端服务网关和RemoteFX场景的风险…

模板网站可以自己买空间吗吗企业官网策划

2022年第十一届数学建模国际赛小美赛 D题 野生动物贸易是否应长期禁止 原题再现&#xff1a; 野生动物市场被怀疑是此次疫情和2002年SARS疫情的源头&#xff0c;食用野生肉类被认为是非洲埃博拉病毒的一个来源。在冠状病毒爆发后&#xff0c;中国最高立法机构永久性地加强了野…