Spring注解之@Import注入有什么用-创新互联

这篇文章给大家分享的是有关Spring注解之@Import注入有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

创新互联建站拥有网站维护技术和项目管理团队,建立的售前、实施和售后服务体系,为客户提供定制化的网站设计、做网站、网站维护、西信服务器托管解决方案。为客户网站安全和日常运维提供整体管家式外包优质服务。我们的网站维护服务覆盖集团企业、上市公司、外企网站、商城建设、政府网站等各类型客户群体,为全球上千家企业提供全方位网站维护、服务器维护解决方案。

@Import导入一个组件

来看 EnablePigxDynamicRoute 这个注解,当我们需要开始动态数据源时,只需要在main 方法加上此注解即可。

@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Inherited
@Import(DynamicRouteAutoConfiguration.class)
public @interface EnablePigxDynamicRoute {
}

实际核心是引入 DynamicRouteAutoConfiguration 这个配置类,此类并未被Spring 扫描管理

写个简单的例子

public class Dog {
}

@Import({Dog.class})
@SpringBootApplication
public class SpringLearnApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringLearnApplication.class, args);
    Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"), "error dog bean");
  }
}

注意 Dog 并未增加上文的声明式注解,注入了一个全类型名称的Bean

ImportSelector 接口

顾名思义导入的选择器,当 @Import 引入的类是 ImportSelector 接口的实现时,会按照此选择器进行匹配注入

public class DogImportSelector implements ImportSelector {
  @Override
  public String[] selectImports(AnnotationMetadata importingClassMetadata) {
    ... 匹配逻辑查询出来一堆要注入的全类名
    return new String[]{"com.pig4cloud.spring.learn.demo1.Dog"};
  }
}
@Import({DogImportSelector.class})
@SpringBootApplication
public class SpringLearnApplication {

  public static void main(String[] args) {
    ConfigurableApplicationContext context = SpringApplication.run(SpringLearnApplication.class, args);
    Assert.isTrue(context.containsBean("com.pig4cloud.spring.learn.demo1.Dog"), "error dog bean");
  }
}

ImportBeanDefinitionRegistrar

当@Import 引入的是 ImportBeanDefinitionRegistrar 接口实现类,会自动引入 registerBeanDefinitions 定义的Bean

以pig 的资源服务器配置设置,自动引入了一个 PigxResourceServerConfigurerAdapter 的类,且 bean 名称为 resourceServerConfigurerAdapter

public class PigxSecurityBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {

  @Override
  public void registerBeanDefinitions(AnnotationMetadata metadata, BeanDefinitionRegistry registry) {
    GenericBeanDefinition beanDefinition = new GenericBeanDefinition();
    beanDefinition.setBeanClass(PigxResourceServerConfigurerAdapter.class);
    registry.registerBeanDefinition(SecurityConstants.RESOURCE_SERVER_CONFIGURER, beanDefinition);

  }
}

这也就意味着,若使用 EnablePigxResourceServer 注解即可开启 pig4cloud 封装的oauth 资源客户端操作类,也是源码的入口

@Import({PigxSecurityBeanDefinitionRegistrar.class})
public @interface EnablePigxResourceServer {

}

感谢各位的阅读!关于“Spring注解之@Import注入有什么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

另外有需要云服务器可以了解下创新互联建站www.cdcxhl.com,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


网页标题:Spring注解之@Import注入有什么用-创新互联
分享路径:http://myzitong.com/article/dpgehj.html