首页 > 其他分享 >Spring注解之@Import

Spring注解之@Import

时间:2022-12-22 15:58:12浏览次数:38  
标签:Spring OtherBean class 导入 Import 注解 public

 

@Import可以导入以下几种种类:
  • 普通类
  • 实现ImportSelector接口的类
  • 实现DeferredImportSelector接口的类
  • 实现ImportBeanDefinitionRegistrar接口的类

 

普通类

被导入的类会被容器注册成一个Bean,可以被依赖注入使用。【4.2 版本之前只可以导入配置类;4.2版本之后也可以导入普通类,导入的类会被当作配置类】   @Import注册一个类时,这个配置类不应该被@Component或者@Configuration注解标记。Spring中会将所有的bean class封装成一个ConfigurationClass,并且此后会判断被封装的bean class是否是由其他类导入的.
@Configuration
@Import(OtherBean.class)
public class SpringConfig { }
public class OtherBean { }

 

ImportSelector实现类

实现类不会被注册成Bean,接口方法的返回值会被注册成Bean。【BeanName是全类名】

@Configuration
@Import(MyImportSelector.class)
public class SpringConfig { }
public class MyImportSelector implements ImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{OtherBean.class.getName()};
    }
}

 

DeferredImportSelector实现类

DeferredImportSelector是ImportSelector的子接口, 所以它们的实现方式一样,只是Spring的处理方式不同。DeferredImportSelector和SpringBoot中自动导入配置文件的延迟导入有关。
@Configuration
@Import(MyDeferredImportSelector.class)
public class SpringConfig { }
public class MyDeferredImportSelector implements DeferredImportSelector {
    @Override
    public String[] selectImports(AnnotationMetadata importingClassMetadata) {
        return new String[]{OtherBean.class.getName()};
    }
}

 

ImportBeanDefinitionRegistrar实现类

实现类不会被注册为bean,但是会回调其接口方法,由开发者通过Spring api手动向Spring容器注册bean。【类似于BeanFactoryPostRegister】

@Configuration
@Import(MyImportBeanDefinitionRegistrar.class)
public class SpringConfig { }
public class MyImportBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar {
    @Override
    public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
        BeanDefinition beanDefinition = new RootBeanDefinition();
        String beanName = StringUtils.uncapitalize(OtherBean.class.getSimpleName());
        beanDefinition.setBeanClassName(OtherBean.class.getName());
        registry.registerBeanDefinition(beanName,beanDefinition);
    }
}

 

标签:Spring,OtherBean,class,导入,Import,注解,public
From: https://www.cnblogs.com/BlueStarWei/p/16988041.html

相关文章

  • 关于import的动态引入
     //xxx.jsexportfunctionfunc1(){alert(`Hello`);}export functionfunc2() {alert(`Hello`);}导入xxx.js:let{func1,func2}=awaitimport('.......
  • page指令的import属性
    在Jsp页面中,Jsp引擎会自动导入下面的包java.lang.*javax.servlet.*javax.servlet.jsp.*javax.servlet.http.*可以在一条page指令的import属性中引入多个类或......
  • SpringMVC框架中的拦截器
    自定义拦截器步骤创建类,实现HandlerInterceptor接口,重写需要的方法preHandle方法是controller方法执行前拦截的方法可以使用request或者response跳转到指定的页面......
  • spring响应数据和结果视图
    返回值分类1、返回字符串Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。@RequestMapping(value="/hello")publicStringsayHello(......
  • SpringMVC实现文件上传
    1、在springmvc.xml中配置文件解析器<!--配置文件解析器对象,要求id名称必须是multipartResolver--><beanid="multipartResolver"class="org.springframework.web......
  • springmvc常用的注解
    RequestParam注解作用:把请求中的指定名称的参数传递给控制器中的形参赋值属性value:请求参数中的名称required:请求参数中是否必须提供此参数,默认值是true,必须提供/**......
  • 设置IDEA自动导入import 关联的包
     ......
  • 【JVM实战系列】「监控调优体系」实战开发arthas-spring-boot-starter监控你的微服务
    前提介绍相信如果经历了我的上一篇Arthas的文章[【JVM实战系列】「监控调优体系」针对于Alibaba-Arthas的安装入门及基础使用开发实战指南]之后,相信你对Arthas的功能和使......
  • springmvc的使用
    1、导入依赖<!--版本锁定--><properties><spring.version>5.0.2.RELEASE</spring.version></properties><dependencies><dependency><groupId>or......
  • springmvc请求参数
    请求参数中文乱码的解决在web.xml中配置Spring提供的过滤器类<!--配置过滤器,解决中文乱码的问题--><filter><filter-name>characterEncodingFilter</filter-name......