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

网站建设及解析流程学院校园网网站建设情况

网站建设及解析流程,学院校园网网站建设情况,公众号和网站,网站制作例子一、条件装配的作用是什么 条件装配是 Spring 框架中一个强大的特性#xff0c;使得开发者能够创建更加灵活和可维护的应用程序。在 Spring Boot 中#xff0c;这个特性被大量用于自动配置#xff0c;极大地简化了基于 Spring 的应用开发。 二、条件装配注解 dependen…一、条件装配的作用是什么 条件装配是 Spring 框架中一个强大的特性使得开发者能够创建更加灵活和可维护的应用程序。在 Spring Boot 中这个特性被大量用于自动配置极大地简化了基于 Spring 的应用开发。 二、条件装配注解 dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-autoconfigure/artifactIdversion${version}/version /dependency 下面以版本2.1.13.RELEASE为例子。 下面是包路径 org.springframework.boot.autoconfigure.condition.XXX 2.1 条件注解 2.2 条件注解说明 下面是相关注解的简单说明标注颜色的可以重点关注 注解 作用 ConditionalOnBean 当容器中存在指定的Bean时满足条件。 ConditionalOnMissingBean 当容器中不存在指定的Bean时满足条件。 ConditionalOnClass 当类路径上存在指定的类时满足条件。 ConditionalOnMissingClass 当类路径上缺少指定的类时满足条件。 ConditionalOnProperty 当存在指定的配置属性并且属性值与给定的值相匹配时满足条件。 ConditionalOnResource 当指定的资源存在于类路径上时满足条件。 ConditionalOnExpression 基于SpEL表达式的结果当表达式为true时满足条件。 ConditionalOnJava 当Java的版本匹配指定的条件时满足条件。 ConditionalOnWebApplication 当应用程序是一个Web应用时满足条件。 ConditionalOnNotWebApplication 当应用程序不是一个Web应用时满足条件。 ConditionalOnJndi 当指定的JNDI存在时满足条件。 ConditionalOnSingleCandidate 当容器中只存在一个指定的Bean或者即使有多个也有一个被标记为首选时满足条件。 前面5个可以重点关注它是最常用的。在第三节中我将分别针对上面的几个案例进行举例说明。 三、条件装配举例说明 用代码的方式来展示条件装配的作用以及在实际生活中到底如何使用。 3.1 灵活性举例 场景描述 假设我们正在开发一个多环境支持的应用程序该应用在开发环境中使用基于内存的数据库如 H2而在生产环境中使用更稳定和持久的关系数据库如 PostgreSQL。 实现方式 不使用条件装配时我们可能需要在应用程序的不同版本中手动更改数据源配置或者在代码中进行环境检查来决定使用哪个数据库。这样做会增加维护工作也容易出错。 使用条件装配我们可以利用 注解来根据环境自动配置不同的数据源 Configuration ConditionalOnProperty(name use-in-memory-db, havingValue true) public class H2DatabaseConfig {// Configuration for H2 Database }Configuration ConditionalOnProperty(name use-in-memory-db, havingValue false) public class PostgresDatabaseConfig {// Configuration for PostgreSQL Database } 例子解释 在这个例子中我们有两个配置类分别为 H2DatabaseConfig 和 PostgresDatabaseConfig。它们都使用了 ConditionalOnProperty 注解来判断一个名为 use-in-memory-db 的属性的值。 如果 use-in-memory-db 属性设置为 trueSpring Boot 会实例化 H2DatabaseConfig 类并使用 H2 数据库配置。如果 use-in-memory-db 属性设置为 falseSpring Boot 会实例化 PostgresDatabaseConfig 类并使用 PostgreSQL 数据库配置 提示案例演示了 ConditionalOnProperty 使用方式。 3.2 自动装配案例 根据配置选择使用不通的缓存实现类。 简化实现 public interface CacheService {void put(String key, Object value);Object get(String key); } Redis 缓存服务实现: Configuration ConditionalOnClass(name redis.clients.jedis.Jedis) public class RedisCacheConfig {Beanpublic CacheService redisCacheService() {return new RedisCacheService();}// RedisCacheService 实现了 CacheService 接口// 使用 Redis 客户端进行具体的缓存操作 } 内存缓存服务实现: Configuration ConditionalOnMissingClass(value redis.clients.jedis.Jedis) public class InMemoryCacheConfig {Beanpublic CacheService inMemoryCacheService() {return new InMemoryCacheService();}// InMemoryCacheService 实现了 CacheService 接口// 使用 Java Map 进行缓存操作 } 在这个例子中我们有两个配置类 RedisCacheConfig 和 InMemoryCacheConfig它们都定义了一个用于条件装配的 CacheService Bean。 ConditionalOnClass(name redis.clients.jedis.Jedis) 注解在 RedisCacheConfig 类上表明如果类路径包含 Redis 的 Jedis 客户端类则创建和注册 RedisCacheService 为 CacheService 的实现。 相对地ConditionalOnMissingClass(value redis.clients.jedis.Jedis) 注解在 InMemoryCacheConfig 类上表明如果类路径不包含 Redis 的 Jedis 客户端类则创建和注册 InMemoryCacheService 为 CacheService 的实现。 在这个条件装配的例子中Spring Boot 应用会自动检查 Redis 客户端库是否存在并基于检查结果来决定使用哪个缓存实现。这个过程完全自动化无需开发者介入也无需修改配置文件。如果你将 Redis 客户端库添加到项目的依赖中Spring Boot 将自动配置使用 RedisCacheService如果移除了相关依赖则会回退到使用 InMemoryCacheService。 提示案例演示了 ConditionalOnClass、 ConditionalOnClass的使用方式。 3.4 避免条件冲突举例 假设我们的应用程序中既可以使用JPA来访问数据库也可以使用MyBatis。但是我们希望这两个持久层框架不要同时生效以免它们尝试操作同一个数据库实体时产生冲突 JPA配置类: Configuration ConditionalOnClass(name org.springframework.data.jpa.repository.JpaRepository) public class JpaConfig {// 这里配置JPA相关的Bean例如EntityManagerFactory, TransactionManager等 } MyBatis配置类: Configuration ConditionalOnClass(name org.mybatis.spring.SqlSessionFactoryBean) ConditionalOnMissingBean(type org.springframework.data.jpa.repository.JpaRepository) public class MyBatisConfig {// 这里配置MyBatis相关的Bean例如SqlSessionFactory, DataSource等 } 例子解释 ConditionalOnClass 注解检查类路径上是否存在指定的类。在这个例子中JpaConfig 类上的 ConditionalOnClass 注解会检查JPA的 JpaRepository 是否存在于类路径上如果存在那么JPA的相关配置就会被注册。 MyBatisConfig 类上同时使用了 ConditionalOnClass 和 ConditionalOnMissingBean 注解。ConditionalOnClass 注解会检查类路径上是否存在MyBatis的 SqlSessionFactoryBean 类而 ConditionalOnMissingBean 注解则确保只有在不存在 JpaRepository 类型的Bean时MyBatis的配置才会生效 避免Bean冲突 这种配置方法确保了当两种持久层技术的类都存在于类路径上时只有JPA的配置会生效因为 JpaConfig 没有额外的限制条件。而MyBatis的配置则只有在JPA不可用即类路径上没有 JpaRepository时才会生效从而避免了同时注册JPA和MyBatis持久层可能引起的Bean冲突。 举例说明实际案例。以 tomcat 容器为例子。 请思考这样一个场景为什么我们的 SpringBoot 项目不再关注 tomcat、jetty 容器了呢他们的加载装配是如何实现的呢 当Spring Boot在类路径上发现tomcat-embedded.jar时它会自动配置Tomcat作为应用程序的默认服务器。同样如果它发现jetty-embedded.jar而没有发现Tomcat那么它将配置Jetty服务器。 以下是简化后的Tomcat和Jetty自动配置的源码示例用于解释Spring Boot是如何使用条件注解来实现自动配置的。 Tomcat自动配置 Configuration(proxyBeanMethods false) ConditionalOnClass({Servlet.class, Tomcat.class, UpgradeProtocol.class}) ConditionalOnMissingBean(value ServletWebServerFactory.class, search SearchStrategy.CURRENT) public class TomcatServletWebServerFactoryConfiguration {Beanpublic TomcatServletWebServerFactory tomcatServletWebServerFactory() {return new TomcatServletWebServerFactory();}} 上面的配置类使用了ConditionalOnClass注解它意味着只有当Servlet、Tomcat和UpgradeProtocol这三个类都存在于类路径上时该配置类才会被考虑。此外ConditionalOnMissingBean注解确保只有在当前上下文中不存在ServletWebServerFactory类型的Bean时才会创建TomcatServletWebServerFactory的Bean。 3.5 提升性能 避免加载和初始化不需要的组件可以提升应用程序的启动速度和运行时性能 Spring Boot 条件装配通过确保只有在需要时才创建和注册特定的 Beans从而帮助提高应用程序的启动速度和运行时性能。这将避免浪费资源去加载和初始化那些在当前应用程序环境中不需要的组件。 下面是一个代码示例它展示了如何使用 Spring Boot 条件装配来决定是否配置一个用于性能监控的组件。 场景描述 假设我们的应用程序包含一个性能监控组件这个组件在生产环境中是有用的但在开发和测试环境中可能不需要它因为它可能会降低应用的性能和增加额外的资源消耗. Configuration ConditionalOnProperty(name app.monitoring.enable, havingValue true) public class PerformanceMonitoringConfig {Beanpublic PerformanceMonitor performanceMonitor() {// 初始化性能监控组件return new PerformanceMonitor();}// 其它与性能监控相关的Beans... } 在这个例子中我们创建了一个配置类 PerformanceMonitoringConfig它包含了创建 PerformanceMonitor Bean 的方法。类上的 ConditionalOnProperty 注解告诉 Spring Boot只有当 app.monitoring.enable 属性的值设置为 true 时才创建 PerformanceMonitor Bean。 应用配置文件 开发或测试环境 application-dev.properties 或 application-test.properties: # 在开发和测试环境中禁用性能监控 app.monitoring.enablefalse 生产环境 : # 在生产环境中启用性能监控 app.monitoring.enabletrue 提升性能的效果 通过上述条件装配的方式Spring Boot应用会根据配置文件中的属性值决定是否加载和初始化性能监控组件。这种机制确保了在开发和测试环境中不会因为性能监控组件的存在而造成不必要的性能开销而在生产环境中性能监控组件才会被激活为我们提供关键的性能数据。 这样的条件装配策略有助于在不同的环境中优化资源使用和应用性能因为只有真正需要的组件才会被加载从而加快了应用程序的启动时间并在运行时提高了性能。 3.6 Profile补充 根据环境不同开发环境和生产环境来使用不同的邮件服务实现。在生产环境中我们使用真实的邮件服务而在开发环境中我们使用一个模拟的邮件服务以避免发送真实的邮件。 public interface EmailService {void sendEmail(String to, String subject, String content); } 定义邮件服务接口: 除去上面的注解外在 Spring 中也提供了 Profile 来实现一定的条件装配。 生产环境的邮件服务实现: Profile(prod) Service public class SmtpEmailService implements EmailService {// SMTP邮件服务相关的配置和方法public void sendEmail(String to, String subject, String content) {// 实际的邮件发送逻辑} } 开发环境的邮件服务模拟实现: Profile(dev) Service public class MockEmailService implements EmailService {// 模拟邮件服务的相关配置和方法public void sendEmail(String to, String subject, String content) {System.out.println(Mock email sent to to with subject subject);// 其他模拟操作} } 在这个例子中我们定义了一个邮件服务的接口 EmailService 和两个实现 SmtpEmailService 以及 MockEmailService。每个实现类上都使用了 Spring 的 Profile 注解来指定它应该在哪个应用配置文件激活的情况下被注册。 Profile(prod) 表示 SmtpEmailService 将仅在应用程序的 prod 配置文件激活时注册到 Spring 容器中。Profile(dev) 表示 MockEmailService 将仅在应用程序的 dev 配置文件激活时注册到 Spring 容器中。 在不同的环境中通过设置 spring.profiles.active 属性我们可以决定激活哪个配置文件。 3.7 更多场景 还可以实现模块化的加载不仅仅是停留在单独的一个类上面。 Spring Boot的条件装配可以支持模块化开发模块化是指将一个应用程序分解成一组可以独立开发、测试和部署的模块。条件装配允许开发者根据应用程序的不同部分是否存在或者某个条件是否满足来实现模块的动态加载与集成。 特别适合多云场景 比如当前有很多信创项目完全可以使用条件装配来加载不通的实现类。 作者曾经使用条件装配改造过登录模块。 使用扫描登录使用密码登录使用 OAUTH 登录 ...... 除去上面案例还可以进行改造。比如 mq 的改造。不同环境使用不同的 mq 进行改造等。 信创环境使用 activimq云上使用 rocketmq 3..... 还有数据库的适配mysql、pg等。 四、本章小结 系统通过上面的几个案例让你感受到了条件装配它的作用和好处。 方便以后在工作项目中如何合适地使用它们。 已同步发布到公众号面汤放盐 第八节 条件装配案例讲解 (qq.com) 掘金账号​​​​​​​第八节 条件装配案例讲解 - 掘金 (juejin.cn)
http://www.pierceye.com/news/510318/

相关文章:

  • 西宁微网站建设wordpress更新文章post.php错误
  • 网络营销网站平台有哪些众希网站建设
  • 网站建设营销的技巧公司招聘网站排行榜
  • 长治网站建设收费多少农村自建房设计图 户型图
  • 广州网站建设 骏域网站建设做搜狗网站优化首页软
  • 广州网站设计软件简约大方网站
  • 网站建设与管理专业好吗做国际贸易如何建网站
  • 小说百度风云榜上海seo网络推广渠道
  • 建设局网站打不开是什么原因wordpress客户端插件
  • 农业 网站源码网站制作产品优化
  • 企业公司网站制作建设怎么区分营销型网站
  • 如何选择顺德网站建设网站开发源代码
  • 北京城乡建设部网站网站页面是自己做还是使用模板
  • 网新企业网站管理系统厦门好景科技做网站
  • 手机网站开发语言深圳网站建设培训
  • wordpress做的视听网站怎么用ftp清空网站
  • 网站建设能干什么网页设计代码模板人物介绍
  • 桂阳网站设计做p2p投资理财的网站
  • 做学术论文的网站从化专业做网站
  • 从化网站制作狮山公司网站建设
  • 网站开发验证码图片不显示php 自动做网站点击量
  • 大连网站开发费多少钱合肥企业网站建设工作室
  • 小企业网站建设的基础知识wap网站 开发
  • 地方门户网站赚钱吗沈阳黑酷做网站建设优化公司怎么样
  • 佛山市seo网站设计工具内部网站建设软件下载
  • 深圳网站建设高端设计网站建设 补充协议
  • 枣阳网站建设 枣阳山水数码自己建网站备案
  • 网站网站制作多少钱共享看世界新域名
  • 网站空间 阿里云wordpress多站点403
  • 下载网站备案的核验单免费ppt模板下载红色