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

上海建站模板系统网站的关键词

上海建站模板系统,网站的关键词,网站建设的现状,库存网站建设哪家好文章目录 1. 概述2. 使用2.1 导入普通Bean2.2 导入配置类2.3 导入 ImportSelector 实现类2.4 导入 ImportBeanDefinitionRegistrar 实现类 3. 区别 1. 概述 当谈及现代Java开发领域中的框架选择时#xff0c;SpringBoot无疑是无与伦比的热门之选。其简化了开发流程#xff0… 文章目录 1. 概述2. 使用2.1 导入普通Bean2.2 导入配置类2.3 导入 ImportSelector 实现类2.4 导入 ImportBeanDefinitionRegistrar 实现类 3. 区别 1. 概述 当谈及现代Java开发领域中的框架选择时SpringBoot无疑是无与伦比的热门之选。其简化了开发流程提高了效率同时保持了可靠性和可维护性。在这个充满活力的生态系统中Import注解闪耀着独特的光芒。它不仅仅是一个普通的注解更是一个强大的工具为我们提供了一种优雅而灵活的方式来管理组件的装配和配置。本文将带您深入探究Import注解的内涵揭示其背后的原理和机制助您在SpringBoot项目中游刃有余地应用这一技术从而让您的应用更加强大、灵活和易于扩展。让我们一起踏上这场关于Import注解的探索之旅探索其奥秘挖掘其潜力 Spring 提供的Import 注解: 使用Import导入的类会被Spring加载到 IOC 容器中, 有四种用法: 导入Bean导入配置类导入 ImportSelector 实现类。一般用于加载配置文件中的类导入 ImportBeanDefinitionRegistrar 实现类 2. 使用 2.1 导入普通Bean 会自动执行当前类的构造方法创建对象存到IOC容器, bean名称为类的全路径 构造一个类 public class User {private Integer id;private String name;// get set 略Overridepublic String toString() {return User{ id id , name name \ };} }使用第一种方式导入 package com.snow;import com.snow.po.User; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; import org.springframework.context.annotation.Import;Import(User.class)//会自动执行当前类的构造方法创建对象存到IOC容器, bean名称为类的全路径 SpringBootApplication public class TempApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(TempApplication.class, args);String[] beanDefinitionNames applicationContext.getBeanDefinitionNames();// 获取并使用每个beanfor (String beanName : beanDefinitionNames) {Object bean applicationContext.getBean(beanName);System.out.println(Bean: beanName - bean.getClass().getName());// 在这里可以进行进一步的操作}// 关闭应用程序上下文applicationContext.close();} }执行结果如下: 可以看到 User 类被注入了容器. 2.2 导入配置类 创建 MyConfig bean并且类中有 带有Bean注解方法创建对象存到IOC容器bean名称为默认方法名称 定义一个类 public class Student {private Integer id;private String name;Overridepublic String toString() {return User{ id id , name name \ };}}创建配置类 Configuration public class MyConfig {Beanpublic Student student() {return new Student();}}第二种方式注入 //Import(User.class)//会自动执行当前类的构造方法创建对象存到IOC容器, bean名称为类的全路径 Import(MyConfig.class) // 创建MyConfig bean并且类中有 带有Bean注解方法创建对象存到IOC容器bean名称为默认方法名称 SpringBootApplication public class TempApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(TempApplication.class, args);String[] beanDefinitionNames applicationContext.getBeanDefinitionNames();// 获取并使用每个beanfor (String beanName : beanDefinitionNames) {Object bean applicationContext.getBean(beanName);System.out.println(Bean: beanName - bean.getClass().getName());// 在这里可以进行进一步的操作}// 关闭应用程序上下文applicationContext.close();} }执行并查看结果: 可以看到注入进来了配置类本身及其配置类里面声明的bean. 2.3 导入 ImportSelector 实现类 ImportSelector 是 Spring 框架提供的一个接口用于动态地选择需要导入的配置类。通过实现该接口可以根据特定的条件在运行时选择性地导入一组配置类从而实现更加灵活的配置管理。 具体来说ImportSelector 接口定义了一个方法 selectImports()该方法返回一个字符串数组数组中包含需要导入的配置类的全限定类名。当在 Spring 配置类中使用 Import 注解并指定实现了 ImportSelector 接口的类时Spring 在加载配置类时会调用该类的 selectImports() 方法根据方法返回的配置类的全限定类名来加载相应的配置类。 使用 ImportSelector 的主要优势在于可以根据程序运行时的条件来动态地选择性地导入配置类从而实现更加灵活的组件管理和配置。例如可以根据环境变量、配置文件的内容或者其他动态条件来决定需要加载哪些配置类从而实现不同环境下的定制化配置。 定义一个类 public class Teacher {private Integer id;private String name;Overridepublic String toString() {return User{ id id , name name \ };} }编写 ImportSelector 的实现类: MyImportSelector如下: public class MyImportSelector implements ImportSelector {Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {// 返回类的全路径的字符串数组return new String[]{com.snow.po.Teacher};} }第三张方式注入 //Import(User.class)//会自动执行当前类的构造方法创建对象存到IOC容器, bean名称为类的全路径 //Import(MyConfig.class) // 创建MyConfig bean并且类中有 带有Bean注解方法创建对象存到IOC容器bean名称为默认方法名称 Import(MyImportSelector.class) // 会调用 MyImportSelector 类的 selectImports() 方法该方法返回一个类名称的数组Spring 将加载这些类这样它们的配置信息就可以被应用到当前的上下文中。 SpringBootApplication public class TempApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(TempApplication.class, args);String[] beanDefinitionNames applicationContext.getBeanDefinitionNames();// 获取并使用每个beanfor (String beanName : beanDefinitionNames) {Object bean applicationContext.getBean(beanName);System.out.println(Bean: beanName - bean.getClass().getName());// 在这里可以进行进一步的操作}// 关闭应用程序上下文applicationContext.close();} }执行并看结果: 注意: 这种方式是最重要的, SpringBoot自动装配核心使用了这种方式自动注入大量Bean. 2.4 导入 ImportBeanDefinitionRegistrar 实现类 导入 ImportBeanDefinitionRegistrar 实现类的作用是允许在 Spring 应用程序上下文加载时以编程方式注册额外的 bean 定义。与 ImportSelector 类似ImportBeanDefinitionRegistrar 接口也提供了一种动态注册 bean 定义的机制但是它更加灵活可以在注册过程中对 bean 定义进行更复杂的操作。 当你使用 Import 注解导入实现了 ImportBeanDefinitionRegistrar 接口的类时Spring 在加载配置类时会调用该类的 registerBeanDefinitions() 方法。在这个方法中你可以通过编程方式注册 bean 定义包括指定 bean 的名称、类型、作用域以及其他属性。 通过使用 ImportBeanDefinitionRegistrar你可以在运行时根据需要动态地注册 bean这样可以更灵活地管理和配置 Spring 应用程序的组件。这种机制特别适用于需要根据外部条件或者动态变化的情况下注册 bean 的场景例如基于配置文件或者运行时环境来决定需要注册哪些 bean。 定义一个类 public class School {private Integer id;private String name;Overridepublic String toString() {return User{ id id , name name \ };}}实现ImportBeanDefinitionRegistrar 接口 public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {/*** param importingClassMetadata 导入类的元注解信息* param registry Bean注册表*/Overridepublic void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {AbstractBeanDefinition beanDefinition BeanDefinitionBuilder.rootBeanDefinition(School.class).getBeanDefinition();registry.registerBeanDefinition(school, beanDefinition);}}第四种方式导入 Import(MyImportBeanDefinitionRegistrar.class) SpringBootApplication public class TempApplication {public static void main(String[] args) {ConfigurableApplicationContext applicationContext SpringApplication.run(TempApplication.class, args);String[] beanDefinitionNames applicationContext.getBeanDefinitionNames();// 获取并使用每个beanfor (String beanName : beanDefinitionNames) {Object bean applicationContext.getBean(beanName);System.out.println(Bean: beanName - bean.getClass().getName());// 在这里可以进行进一步的操作}// 关闭应用程序上下文applicationContext.close();} }执行看结果 可以看到注册成功. 3. 区别 Import(MyImportSelector.class) 和 Import(MyImportBeanDefinitionRegistrar.class) 都是用于在 Spring 中动态导入配置信息的注解但它们的作用和使用场景略有不同。 Import(MyImportSelector.class): 作用通过实现 ImportSelector 接口的类动态地选择需要导入的配置类。使用场景通常用于根据某些条件动态地选择需要导入的配置类。例如根据环境变量或者配置文件中的设置来决定需要加载哪些组件或配置。 Import(MyImportBeanDefinitionRegistrar.class): 作用通过实现 ImportBeanDefinitionRegistrar 接口的类以编程方式注册额外的 bean 定义。使用场景通常用于需要根据运行时动态条件注册 bean 的场景。例如根据系统配置或者运行时环境来决定需要注册哪些 bean或者根据一些复杂的逻辑来注册 bean。 使用场景示例 如果需要根据一些条件在运行时动态地选择性地加载一些配置类可以使用Import(MyImportSelector.class)。 如果需要在运行时根据条件注册一些 bean可能需要进行一些复杂的逻辑判断并且注册的 bean 可能不只是简单地选择性加载配置类你可以使用 Import(MyImportBeanDefinitionRegistrar.class)。
http://www.w-s-a.com/news/874844/

相关文章:

  • 全球排名前十网站百度网站官网网址
  • 商家在携程旅游网站怎样做宣传做网站公司苏州
  • 芜湖做网站都有哪些广州音乐制作公司
  • 青岛好的网站制作推广注册公司流程步骤
  • 怎么制作营销网站模板wordpress苗木模板
  • 手机网站样例wordpress 排序
  • 济南网站建设手机网站开发人员需要去做原型吗
  • 动易网站模板下载微信支付 wordpress
  • 学校建设外文网站情况阿里云 建设网站怎么样
  • 网站建设与网页设计制作深圳网站建设首选上榜网络
  • 网站浏览成交指标计算机应用是做什么的
  • 企业网站建设的要求wordpress 404页面模板
  • 公司怎么注册官方网站wordpress花园网站
  • 一般网站的建设步骤有哪些企业网站建设应该注意什么事项问题
  • 枣庄市建设局网站建设工程合同交底的内容包括
  • 全国十大跨境电商排名seo优化入门教程
  • 福安网站开发网站内容建设要求age06
  • 网站开发制作公司罗湖在线
  • 做网站银川潍坊网络科技有限公司
  • 南宁企业网站建站模板盐田高端网站建设
  • 深圳市建设局网站张局北京档案馆网站建设
  • 运动健身型网站开发网站备案掉了什么原因
  • 网站开发的前后端是什么注册网站多少钱一年
  • 彩票网站建设需要什么网站未备案被阻断怎么做
  • wordpress 版权声明网站优化排名哪家性价比高
  • dedecms网站关键词外包做网站平台 一分钟
  • 酒网站建设游戏分类网站怎么做
  • 仿牌网站安全北京大良网站建设
  • ps中怎样做网站轮播图片吉林省网站建设公司
  • 广西网站建设-好发信息网温江做网站哪家好