`

@ImportResouce和@@Import在springboot中的使用

阅读更多

@ImportResouce 和 @Import 在springboot中的使用

 

@Import注解可以导入类(bean会被spring容器托管),也可以导入配置类(配置类中的所有bean会被spring容器托管)

@ImportResouce注解加载XML配置文件

 

1、@ImportResouce有两种常用的引入方式:classpath和file,具体查看如下的例子:

 

classpath路径:locations={"classpath:application-bean1.xml","classpath:application-bean.xml"}

file路径:locations= {"file:d:/test/application-bean1.xml"};

 

如下:

@Configuration

@ImportResource({"classpath:application-bean.xml"})

public class ShiroConfig{

}

 

2、重点说一下@Import

springboot提供了三种Import的方式:

1、@Import注解导入

2、实现ImportSelector接口

3、实现ImportBeanDefinitionRegistrar接口

 

首先定义三个普通java类User.java 、Role.java、Person.java,一个配置类ImportConfig.java

 

public class User {

 

private String name;

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}

 

public class Role {

 

private String name;

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}

 

 

public class Person {

private String name;

 

public String getName() {

return name;

}

 

public void setName(String name) {

this.name = name;

}

}

 

public class ImportConfig {

 

    //配置Person的bean

@Bean

public Person person(){

return new Person();

}

}

 

直接注入@Import注解

 

注解导入User、Role、ImportConfig,如下

 

    @SpringBootApplication

@Import(value={User.class,Role.class,ImportConfig.class})

public class ImportApplication {

public static void main(String[] args) {

ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);

System.out.println(context.getBean(User.class));

System.out.println(context.getBean(Role.class));

System.out.println(context.getBean(Person.class));

System.out.println("=================================");

context.close();

}

}

 

结果打印如下:

com.sjz.lesson2.config.User@c20be82

com.sjz.lesson2.config.Role@13c612bd

com.sjz.lesson2.config.Person@3ef41c66

=================================

 

发现注入成功

 

实现ImportSelector

1、实现ImportSelector接口:

 

public class MyImportSelector implements ImportSelector{

@Override

public String[] selectImports(AnnotationMetadata importingClassMetadata) {

return new String[]{User.class.getName(),Role.class.getName(),ImportConfig.class.getName()};

}

}

 

2、定义注解ImportSelectorAnnotation,导入MyImportSelector类

@Retention(RetentionPolicy.RUNTIME)

@Target(ElementType.TYPE)

@Documented

@Import(value=MyImportSelector.class)

public @interface ImportSelectorAnnotation {

 

}

 

3、java类中使用ImportSelectorAnnotation注解

@ImportSelectorAnnotation //等价于@Import(value=MyImportSelector.class)

 

@SpringBootApplication

//@Import(value={User.class,Role.class,ImportConfig.class})

//@Import(value=MyImportSelector.class)//等价于@Import(value={User.class,Role.class,ImportConfig.class})

@ImportSelectorAnnotation //等价于@Import(value=MyImportSelector.class)

public class ImportApplication {

public static void main(String[] args) {

ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);

System.out.println(context.getBean(User.class));

System.out.println(context.getBean(Role.class));

System.out.println(context.getBean(Person.class));

System.out.println("=================================");

context.close();

}

}

测试可以正常获取

 

实现ImportBeanDefinitionRegistrar接口

1、实现ImportBeanDefinitionRegistrar接口

 

public class MyBeanDefinitionRegistrar implements ImportBeanDefinitionRegistrar{

 

@Override

public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {

BeanDefinitionBuilder userBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(User.class);

registry.registerBeanDefinition(User.class.getName(), userBeanDefinition.getBeanDefinition());

 

BeanDefinitionBuilder roleBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(Role.class);

registry.registerBeanDefinition(Role.class.getName(), roleBeanDefinition.getBeanDefinition());

 

BeanDefinitionBuilder importConfigBeanDefinition = BeanDefinitionBuilder.rootBeanDefinition(ImportConfig.class);

registry.registerBeanDefinition(ImportConfig.class.getName(), importConfigBeanDefinition.getBeanDefinition());

}

}

 

2、定义注解BeanDefinitionRegistrarAnnotation导入MyBeanDefinitionRegistrar

 

@Target(ElementType.TYPE)

@Retention(RetentionPolicy.RUNTIME)

@Documented

@Import(value=MyBeanDefinitionRegistrar.class)

public @interface BeanDefinitionRegistrarAnnotation {

 

}

 

3、java类中使用BeanDefinitionRegistrarAnnotation注解

 

@SpringBootApplication

@BeanDefinitionRegistrarAnnotation

public class ImportApplication {

public static void main(String[] args) {

ConfigurableApplicationContext context = SpringApplication.run(ImportApplication.class, args);

System.out.println(context.getBean(User.class));

System.out.println(context.getBean(Role.class));

System.out.println(context.getBean(Person.class));

System.out.println("=================================");

context.close();

}

}

 

备注:可以在具体类中直接使用@Import注解导入MyImportSelector和MyBeanDefinitionRegistrar,不需要使用注解

分享到:
评论

相关推荐

    Springboot @Import 详解

    在本篇文章中,我们将详细介绍 @Import 的作用和使用方法。 什么是 @Import? @Import 是 Spring Boot 中的一个注解,用于将指定的类实例注入到 Spring IOC Container 中。它的作用类似于 Spring XML 中的 `...

    spring boot 整合mybatis,基于@Select注解方式

    本教程将详细介绍如何在Spring Boot项目中整合MyBatis,并使用@Select注解来实现数据库查询。 首先,我们需要在Spring Boot项目中引入MyBatis的依赖。在`pom.xml`文件中添加如下依赖: ```xml <groupId>org....

    springBoot原理&流程

    `@ComponentScan`注解则会扫描指定包及其子包下的所有@Component、@Service、@Repository和@Controller等注解的类,将它们注册为Spring Bean,以便在应用中使用。 6. SpringApplication `SpringApplication`是...

    springboot注解@PropertySource使用Demo

    在上面的`DatabaseConfig`类中,我们通过`@Value`注解将`database.properties`文件中的`db.url`、`db.username`和`db.password`属性注入到对应的字段中,使得这些配置值可以直接在类中使用。 需要注意的是,如果在...

    Springboot中使用数据库配置定时任务

    5. 在业务逻辑类中使用`@Scheduled`注解来定义定时任务,并根据数据库配置动态调整执行频率。 通过这种方式,我们可以灵活地管理和调整应用中的定时任务,而无需修改代码,只需更改数据库中的配置即可。

    SpringBoot使用Junit进行单元测试

    这时,可以使用`@TestConfiguration`注解创建一个只在测试中使用的配置类。 此外,Spring Boot测试支持`@MockBean`和`@SpyBean`注解,可以用来模拟或监控bean的行为,这对于测试时避免不必要的数据库操作或外部服务...

    SpringBoot实现定时任务和异步调用

    SpringBoot框架提供了强大的功能来实现定时任务和异步调用,这在业务场景中非常常见。例如,在电商平台中,需要定时发送邮件、短信、统计监控数据等操作,而在订单流程中,需要异步调用下单、发货通知、短信推送、...

    rsocket在springboot中的使用

    在Spring Boot中使用RSocket,首先需要引入相关依赖。在`pom.xml`文件中,添加`spring-boot-starter-rsocket`和`spring-boot-starter-webflux`依赖,因为RSocket基于Reactive Streams进行数据处理,而WebFlux是...

    SpringBoot2种单元测试方法解析

    在测试类中,我们可以使用 `@Test` 注解来标记测试方法,并使用 `@Before` 和 `@After` 注解来标记测试前的 setup 和 teardown 操作。 MockMvc MockMvc 是 Spring Boot 提供的一种强大的测试工具,可以模拟 HTTP ...

    sass-bp:用@use代替@import的无礼的样板

    在Sass世界里,@import规则曾是组织和合并样式表的主要方式,但在Sass 7.0版本之后,引入了新的模块系统,推荐使用@use来替代@import。这个转变是为了提供更好的命名空间管理和避免潜在的命名冲突,从而提高代码的可...

    springboot项目中枚举类型的最佳实践

    在Spring Boot项目中,枚举类型(Enums)的使用是一种常见...以上所述内容,都是在`springboot-enum-demo-master`项目中可以找到的实际应用示例,可以帮助开发者更好地理解和实现Spring Boot项目中枚举类型的高效使用。

    springboot项目查询es中的日志内容

    在本项目中,我们主要探讨如何使用SpringBoot与Elasticsearch(ES)集成,以便查询存储在ES中的日志内容。Elasticsearch是一种强大的、分布式、实时的搜索和分析引擎,常用于处理大量数据,特别是在日志管理和分析...

    最最最简单的SpringBoot+Redis

    标题 "最最最简单的SpringBoot+Redis" 描述了如何在SpringBoot项目中集成和使用Redis,这是一个流行的Java开发框架和一个高效的键值存储系统。接下来,我们将深入探讨这个主题,详细讲解SpringBoot与Redis的集成,...

    SpringBoot集成Swagger简单使用

    在现代的Web开发中,API接口的文档化和测试是非常重要的环节,这使得开发者能够方便地理解和使用API。Swagger作为一款流行的API文档化工具,它提供了直观、易用的界面来展示、测试和理解RESTful API。在Java Web开发...

    SpringBoot中web-mvc搭建案例

    在本文中,我们将深入探讨如何在IDEA(IntelliJ IDEA)中搭建一个基于SpringBoot的Web MVC应用程序。SpringBoot简化了Spring应用的初始搭建以及开发过程,它内嵌了Tomcat服务器,使得我们可以无需额外配置就能运行Web...

    redis-cluster结合springboot的使用自定义序列化

    在SpringBoot中,我们可以通过配置`application.yml`或`application.properties`文件来设置JedisCluster的相关参数。以下是一个基本的YAML配置示例: ```yaml spring: data: redis: cluster: nodes: node1:6379...

    css中link和@import的区别分析详解

    导入CSS文件主要有两种方式: 链接式(link) 代码如下 复制代码代码如下: <link rel=”stylesheet” href=”style.css” type=”text/css”/>... 而采用@import方式,浏览器则会先装载完整个H

    浅谈Spring中@Import注解的作用和使用

    @Import 注解可以在@Configuration 注解的配置类中使用,用于导入其他配置类或bean 方法。例如: ```java @Configuration @Import({TestBean1.class, TestBean2.class}) public class AppConfig { // ... } ``` 在...

    SpringBoot 整合Mybatis 创建临时表

    在IT行业中,SpringBoot和Mybatis是两个非常重要的框架,它们分别是Java后端开发的主流框架。SpringBoot简化了Spring的配置,提供了快速构建应用程序的能力,而Mybatis则是一个轻量级的持久层框架,专注于SQL映射和...

    JAVA超级简单的excel导入导出,springboot使用easypoi

    通过这个例子,我们可以看到easypoi在SpringBoot项目中的使用非常简便,它大大简化了Excel操作的代码,提高了开发效率。同时,由于其对Word和PDF的支持,easypoi成为了一个全面的文档处理工具,对于需要处理多种格式...

Global site tag (gtag.js) - Google Analytics