栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

@EnableConfigurationProperties与@ConfigurationProperties 的关系。。。何时使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

@EnableConfigurationProperties与@ConfigurationProperties 的关系。。。何时使用

简单来讲。。。就是 【   SpringBoot  无法直接获取   第三方 jar包 中 bean 】

                 【jar包使用@Enable** 形式,提供了 spring 将 bean ,加入IOC 容器的方式】

SpringBoot启动类,不会扫描 非同一个 包下的 bean,不会加入IO从容器

要创建,这个bean。。要么  加入扫描 这个包。但三方模块不知导入扫描那个包。

@Enable* 形式,底层封装了 @import(类。class),,自动加入IOC容器。

SpringBoot 非同一个包  下,

        使用@EnableConfigurationProperties(放入加了@ConfigurationProper。class )

   SpringBoot可将 @Enable*后的类   。。加入IOC 容器

(1)首先 @ConfigurationProperties ,,,是为了 读取 配置文件

使用有几个前提

            a)要让java对象,与配置文件自动映射,要加 prefix=“配置文件对象名”

b)User类 写get set 方法

c)类上 加注解@Component ,才能被spring加入 IOC 容器,成为 bean。。对象存在,才能映射

@Component
@ConfigurationProperties(prefix = "user")
public class User {
    private String name;
    private int  age;

    ...get ,,,,set  方法
}

user:
  name: name1
  age: 18

 (2) @EnableConfigurationProperties与 @ConfigurationProperties  的关系,

               就是多了 一个 @Enable。。。@Enable*** 是一种封装形式。

                  这个形式,什么作用?

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

a)  首先了解。。。  上面 代码 中的 @Component ,对象存在,才能映射。

如果 类 和当前  springBoot的启动类,在同一个 【包】,Spring 自然能读取 @Componment,

    若不在一个包呢????

参看springBoot的启动类注解  @ComponentScan(,如果【不在】 【一个包】,

        启动类,不会扫描这个包 。。。 就无法加入spring的IOC容器

 (当然我们可以,在启动类上 。。加入扫描这个包,,这样也能加入ioc

    //@ComponentScan("com.itheima.springbootenable1.config")

@SpringBootConfiguration
@EnableAutoConfiguration
@ComponentScan(
   。。。。。
)
public @interface SpringBootApplication {

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

b) 下面,将讲解 @Enable这种形式。。。。与上文中的  User 类无关 

但对于,外部引入的  第三方模块【与启动类,不在一个包】。且【不知道 导入那个包】,该如何 配置

   这样,就 引入了 @Enable** 这种形式 ,其底层 是 封装的 @Import 注解

  我们都用 @Import (*.class)导入过类, 会将其   导入的类,直接加入到  spring的IOC容器。

这是    A 包 


@Configuration
public class UserConfig {

    @Bean
    public User createUser() {
        return new User();
    }
@Import({UserConfig.class})
public @interface EnableUser {
}

我们创建了 自定义  注解      @EnableUser。。。封装的 @import(类。class)

  bean的提供者。。使用了 @Enable*的形式,,,如此,可不用import(类。class)

 B包 【不是同一个包】   直接使用这个注解,,,就能将其    加入 IOC容器,直接获取【不是同一个包 bean】

                    

B包的  SpringBoot的启动类

//import的 4种导入方式
//@Import(User.class)
//@Import({UserConfig.class})
//@Import(MyImportSelector.class)
//@Import(MyImportBeanDefinitionRegistrar.class)

@EnableUser
public class SpringBootEnable2Application {

    public static void main(String[] args) {
        ConfigurableApplicationContext context = SpringApplication.run(SpringBootEnable2Application.class, args);

        Object user =  context.getBean("createUser");
     System.out.println(user);

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/839278.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号