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

@EnableConfigurationProperties与@ConfigurationProperties 的关系。。。何时使用,第1张

简单来讲。。。就是 【   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);

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/738828.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-28
下一篇 2022-04-28

发表评论

登录后才能评论

评论列表(0条)

保存