美文网首页Spring Boot
使用SpringBoot中遇到的问题

使用SpringBoot中遇到的问题

作者: 紫雨杰 | 来源:发表于2018-05-15 17:20 被阅读0次

    1、问题一

       1)、
           ● 在写属性配置文件的时候(即xxxPeoperties.java),只需要在该类上面添加@ConfigurationProperties(prefix = "...")即可,
             此时不要把该类加入到容器中【即不要添加@Configuration注解或者@EnableConfigurationProperties(xxxProperties.class)】
    
           ● 在写配置类的时候,再在配置类上添加@EnableConfigurationProperties(xxxProperties.class)注解,
             表明开启@ConfigurationProperties的功能,把属性配置文件中的属性和配置文件中的属性绑定,并把属性配置文件加入到容器中;
             此外还需要添加@Configuration注解,说明这是一个配置类,相当于配置文件,可以向容器中添加组件。
    
       2)、原因如下:
             
             ● 如果按照上面那么写,则容器启动的时候就不会把属性配置文件这个类添加到容器中,而是再使用的时候才会进行添加,相当于饿汉式和懒汉式
    

    2、问题二

       1)、在Spring3.x刚推出的时候,推荐使用注入的就是setter方式注入,官方给的解释就是,当属性是可选的时候,大量的构造函数参数会显得太笨拙,
           还有一点就是setter的方式能用让类在之后重新配置或者重新注入。
    
       2)、在Spring4.x的时候,Spring的官方文档中建议最好使用构造器注入,原因是:
    
           ①、保证依赖不可变(final关键字)
    
           ②、避免了循环依赖,让问题提前暴露
    
           ③、保证依赖不为空(省去了我们对其检查):当要实例化FooController的时候,由于自己实现了有参数的构造函数,所以不会调用默认构造函数,
              那么就需要Spring容器传入所需要的参数,所以就两种情况:1、有该类型的参数->传入,OK 。2:无该类型的参数->报错。所以保证不会
              为空,Spring总不至于传一个null进去吧
    
           ④、保证返回客户端(调用)的代码的时候是完全初始化的状态:这个可以跟上面的依赖不为空结合起来,向构造器传参之前,要确保注入的内容
              不为空,那么肯定要调用依赖组件的构造方法完成实例化。而在Java类加载实例化的过程中,构造方法是最后一步(之前如果有父类先初始化
              父类,然后自己的成员变量,最后才是构造方法,这里不详细展开。)。所以返回来的都是初始化之后的状态。
    
       3)、构造器注入的时候,如果有多个构造器,则会报错Variable 'helloService' might not have been initialized

    相关文章

      网友评论

        本文标题:使用SpringBoot中遇到的问题

        本文链接:https://www.haomeiwen.com/subject/rpkplftx.html