美文网首页
Sping中bean的延迟加载

Sping中bean的延迟加载

作者: AlanSun2 | 来源:发表于2019-05-13 17:39 被阅读0次

    Srping中的延迟加载使用@Lazy注解或把<bean/>中的lazy-init属性设置为true就可以了。
    之前只了解这么多,今天使用demo测试了一下,和想象还是有点出路,做下记录。

    首先@Lazy可以注释在类似@Component组件上,例如:

    @Lazy
    @Component
    public class MyJavaBean  {
        private String desc;
        private String remark;
    }
    

    还可以注解在@Bean@Configuration

    • 注解在@Configuration上,表示该类下面所有的bean都会延迟加载,如果想要排除其中某一个bean的延迟加载可以使用@Bean(false)来去除。
    • 注解在@Bean上表示该bean延迟加载。
    @Lazy
    @Configuration
    public class MyConfig {
    
        @Lazy(false)//非延迟加载
        @Bean(initMethod = "initMethod", destroyMethod = "destroy1")
        public MyJavaBean myJavaBean() {
            MyJavaBean myJavaBean = new MyJavaBean();
            myJavaBean.setDesc("原始的描述信息");
            myJavaBean.setRemark("原始的备注信息");
            return myJavaBean;
        }
    
        @Bean //延迟加载
        public HhahaExample hhahaExample() {
            return new HhahaExample(myJavaBean());
        }
    }
    

    请注意,如果一个类(A)使用了延迟加载,而另一个类(B)需要注入A,这时候A的延迟加载是不起作用的,Spring会立马实例化A。那么这种情况下如果使用延迟加载呢,只要在依赖注入点上也加上@Lazy就可以了,表示该依赖延迟注入,比如:

    @Lazy //这里使用上面提到的第一种方法
    @Component
    public A {
     
    }
    
    public B {
      @Lazy
      @Autowried
      private A a;
    }
    

    这时候的A才是延迟加载的。

    相关文章

      网友评论

          本文标题:Sping中bean的延迟加载

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