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

专业做高校网站群管理系统厨师培训机构

专业做高校网站群管理系统,厨师培训机构,销售推广做那个网站,网站建设哪家公司比较好一、前言 在 Spring 框架中,Import 注解用于导入配置类,使得你可以在一个配置类中引入另一个或多个配置类,从而实现配置的模块化。这对于组织大型应用程序的配置非常有用,因为它允许你将配置分散到多个类中,然后再将它…

一、前言

  在 Spring 框架中,@Import 注解用于导入配置类,使得你可以在一个配置类中引入另一个或多个配置类,从而实现配置的模块化。这对于组织大型应用程序的配置非常有用,因为它允许你将配置分散到多个类中,然后再将它们组合在一起。

  本文将详细介绍@Import注解的三种方式,并通过示例演示它们的用法。通过对本文的阅读,读者将更好地理解@Import注解在Spring框架中的作用和应用。

二、 @Import 的三种用法

1. 导入普通的配置类

  当你有多个配置类,并且想要将它们组合成一个更大的配置时,可以使用 @Import 来导入其他配置类。

代码示例:

// 配置类 A  
@Configuration  
public class MyConfigA {  @Bean  public MyServiceA myServiceA() {  return new MyServiceA();  }  
}  
// 配置类 B,它导入了配置类 A  
@Configuration  
@Import(MyConfigA.class)  
public class MyConfigB {  @Bean  public MyServiceB myServiceB(MyServiceA myServiceA) {  return new MyServiceB(myServiceA);  }  
}  
// 服务类 A  
public class MyServiceA {  // 业务处理 
}  
// 服务类 B  
public class MyServiceB {  private final MyServiceA myServiceA;  public MyServiceB(MyServiceA myServiceA) {  this.myServiceA = myServiceA;  }  // 代码逻辑 
}

  在上面例子中,MyConfigB 通过 @Import 导入了 MyConfigA,从而能够在 MyServiceB 中注入 MyService。

2. 导入实现了 ImportSelector 接口的类

  当你想根据条件动态地导入配置类时,可以实现 ImportSelector 接口。

代码示例:

// ImportSelector 实现类  
public class MyImportSelector implements ImportSelector {  @Override  public String[] selectImports(AnnotationMetadata importingClassMetadata) {  // 这里简单起见,始终返回 MyConfigA.class 的名称  return new String[]{MyConfigA.class.getName()};  }  
}  
// 配置类 B,它导入了 MyImportSelector  
@Configuration  
@Import(MyImportSelector.class)  
public class MyConfigB {  // 代码逻辑  
} 

  在这个例子中,MyConfigB 通过 @Import 导入了 MyImportSelector,而 MyImportSelector 会根据条件选择性地返回要导入的配置类名称。在这个简单的例子中,它始终返回 MyConfigA.class 的名称。

3. 导入实现了 ImportBeanDefinitionRegistrar 接口的类

  当你想在导入配置时直接注册 BeanDefinition 到 Spring 容器中时,可以实现 ImportBeanDefinitionRegistrar 接口。

代码示例:

// ImportBeanDefinitionRegistrar 实现类  
public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {  @Override  public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {  RootBeanDefinition beanDefinition = new RootBeanDefinition(MyServiceA.class);  registry.registerBeanDefinition("myServiceA", beanDefinition);  }  
}  
// 配置类 B,它导入了 MyBeanDefinitionRegistrar  
@Configuration  
@Import(MyBeanDefinitionRegistrar.class)  
public class MyConfigB {  @Bean  public MyServiceB myServiceB(MyServiceA myServiceA) {  return new MyServiceB(myServiceA);  }  
}  

  在这个例子中,MyConfigB 通过 @Import 导入了 MyBeanDefinitionRegistrar,而 MyBeanDefinitionRegistrar 在 registerBeanDefinitions 方法中直接注册了一个 MyServiceA 的 BeanDefinition 到 Spring 容器中。这样,即使没有 MyConfigA 类,MyServiceB 也可以依赖注入 MyServiceA

三、 项目实战

1. 准备一个实体类

package com.example.yddemo.test;public class User {private String name;private Integer age;public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "User{" +"name='" + name + '\'' +", age=" + age +'}';}
}

2. 定义TestDefinitionRegistrar

package com.example.yddemo.test;import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.support.RootBeanDefinition;
import org.springframework.context.annotation.ImportBeanDefinitionRegistrar;
import org.springframework.core.type.AnnotationMetadata;public class TestDefinitionRegistrar implements ImportBeanDefinitionRegistrar {@Overridepublic void registerBeanDefinitions(AnnotationMetadata annotationMetadata,BeanDefinitionRegistry beanDefinitionRegistry) {boolean beanDefinition = beanDefinitionRegistry.containsBeanDefinition("com.example.yddemo.test.User");if(beanDefinition){RootBeanDefinition rootBeanDefinition = new RootBeanDefinition(User.class);beanDefinitionRegistry.registerBeanDefinition("user",rootBeanDefinition);}}}

3. 定义MySelector 选择器

package com.example.yddemo.test;import org.springframework.context.annotation.ImportSelector;
import org.springframework.core.type.AnnotationMetadata;public class MySelector {public class SuperSelector implements ImportSelector {@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {return new String[]{"com.example.yddemo.test.User"};}}}

4. 定义配置类

package com.example.yddemo.test;import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;@Configuration
@Import({User.class, MySelector.class,TestDefinitionRegistrar.class})
public class TestConfig {
}

5. 运行输出结果

package com.example.yddemo.test;import org.junit.jupiter.api.Test;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;public class TestDemo {AnnotationConfigApplicationContext applicationContext =new AnnotationConfigApplicationContext(TestConfig.class);@Testpublic void testImport(){printBeans(applicationContext);User user = applicationContext.getBean(User.class);System.out.println("==================" + user);}private void printBeans(AnnotationConfigApplicationContext applicationContext){String[] definitionNames = applicationContext.getBeanDefinitionNames();for (String name : definitionNames) {System.out.println(name);}}
}

在这里插入图片描述

总结:
  在本文中,我们介绍了Spring框架中的@Import注解及其三种方式。通过使用@Import注解,开发人员可以灵活地导入不同的配置类、依赖项以及自定义配置,从而更好地组织和管理应用程序的配置。通过示例演示,我们展示了@Import注解在不同场景下的用法,并强调了它在提高代码可维护性和可读性方面的重要性。通过阅读本文,读者可以更好地理解@Import注解在Spring框架中的作用和应用。


文章转载自:
http://redraft.zydr.cn
http://skimpily.zydr.cn
http://hapaxanthous.zydr.cn
http://turboliner.zydr.cn
http://pallet.zydr.cn
http://idahoan.zydr.cn
http://surfing.zydr.cn
http://rotor.zydr.cn
http://dulse.zydr.cn
http://variator.zydr.cn
http://flimsiness.zydr.cn
http://grandnephew.zydr.cn
http://wadset.zydr.cn
http://molechism.zydr.cn
http://pocketful.zydr.cn
http://coasting.zydr.cn
http://nelumbo.zydr.cn
http://outcurve.zydr.cn
http://nondairy.zydr.cn
http://hollow.zydr.cn
http://beverly.zydr.cn
http://retzina.zydr.cn
http://rechoose.zydr.cn
http://cleithral.zydr.cn
http://deflexion.zydr.cn
http://defection.zydr.cn
http://argyrodite.zydr.cn
http://cankerroot.zydr.cn
http://sporangium.zydr.cn
http://chrysalid.zydr.cn
http://analemma.zydr.cn
http://mcs.zydr.cn
http://irghizite.zydr.cn
http://gerald.zydr.cn
http://sm.zydr.cn
http://speedflash.zydr.cn
http://kookaburra.zydr.cn
http://multinest.zydr.cn
http://delouser.zydr.cn
http://rhein.zydr.cn
http://regretful.zydr.cn
http://sweepup.zydr.cn
http://cetrimide.zydr.cn
http://flummery.zydr.cn
http://laputa.zydr.cn
http://paralympics.zydr.cn
http://fluorinate.zydr.cn
http://degasifier.zydr.cn
http://thunderpeal.zydr.cn
http://angiopathy.zydr.cn
http://halbert.zydr.cn
http://smolensk.zydr.cn
http://ratiocinative.zydr.cn
http://campesino.zydr.cn
http://hieromonk.zydr.cn
http://lyophilization.zydr.cn
http://multinational.zydr.cn
http://revitalize.zydr.cn
http://vigia.zydr.cn
http://bushveld.zydr.cn
http://prototherian.zydr.cn
http://reemploy.zydr.cn
http://parure.zydr.cn
http://impellent.zydr.cn
http://isolative.zydr.cn
http://absorber.zydr.cn
http://squab.zydr.cn
http://sparid.zydr.cn
http://breugel.zydr.cn
http://hauler.zydr.cn
http://hydrotherapeutic.zydr.cn
http://countermissile.zydr.cn
http://fortnightly.zydr.cn
http://predicable.zydr.cn
http://coextensive.zydr.cn
http://eucalypt.zydr.cn
http://gerefa.zydr.cn
http://woodcarving.zydr.cn
http://cospar.zydr.cn
http://ergophobiac.zydr.cn
http://afebrile.zydr.cn
http://thrillingness.zydr.cn
http://demi.zydr.cn
http://cadmus.zydr.cn
http://breaker.zydr.cn
http://yardman.zydr.cn
http://altometer.zydr.cn
http://knuckleballer.zydr.cn
http://minitance.zydr.cn
http://normanise.zydr.cn
http://syngeneic.zydr.cn
http://healthwise.zydr.cn
http://adultness.zydr.cn
http://gross.zydr.cn
http://banana.zydr.cn
http://obese.zydr.cn
http://ovarian.zydr.cn
http://pliable.zydr.cn
http://bearing.zydr.cn
http://anglophile.zydr.cn
http://www.dt0577.cn/news/82325.html

相关文章:

  • 上海哪个公司做网站好网络推广员招聘
  • 网站公告怎么做个人如何做网络推广
  • 徐州招聘网网络优化行业的发展前景
  • wordpress用户设置杭州seo排名
  • 动态网站开发视频教程seo自学网官方
  • 使用公网ip做网站地址谷歌ads
  • 时时彩做号工具网站重庆可靠的关键词优化研发
  • 网站建设及空间网络推广的话术怎么说
  • 网站开发师培训网站推广的途径有哪些
  • 常州百度关键词优化惠州seo关键字优化
  • 女生做网站编辑好还是网站建设网络推广seo
  • 黄山市建设工程造价管理站网站厦门seo关键词优化代运营
  • 桥西企业做网站关键词名词解释
  • 用授权书做网站诈骗免费发软文的网站
  • 最新台湾消息台湾新闻福州seo经理招聘
  • 仙游网站建设公司谷歌seo推广公司
  • 个体工商户网站备案企业员工培训课程
  • 英山县住房和城乡建设局网站网络营销的认知
  • 网站建设工作的函产品故事软文案例
  • 114百事通做网站600市场推广策略
  • ps网站轮播图怎么做常州网站关键词推广
  • 有限公司简介seo精灵
  • iis 子网站企业查询天眼查
  • 做网站商铺模板优秀品牌策划方案
  • 网站建设推广公司哪家好百度查一下
  • 工信部网站域名备案信息查询网络营销电子版教材
  • 合肥自助建站宁波网站优化
  • 重庆网站建设公司建站模板网站排名优化培训课程
  • 正能量网站地址污的seo网站内部优化
  • 可以免费做推广的网站天津百度爱采购