编程语言
首页 > 编程语言> > java-真正调用bean之后的Spring延迟加载

java-真正调用bean之后的Spring延迟加载

作者:互联网

我想仅在实际使用后(而不是仅自动装配时)初始化一个(单个)Bean.假设我有一个Client,仅在我想调用其任何方法时才想初始化

@Component
@Lazy(true)
public class Client {

    @PostConstruct
    void init() {}
    void action(){}
}

我有一个Service类,有时使用它(有时可能不使用).

@Service
public class Service {

    @Autowired
    Client client;

    void action1WithClient(){}
    void action2WithClient(){}
    void actionWithoutClient(){}
}

现在,由于@Autowired以及急切加载Service的事实,客户端在应用程序启动时就被初始化,而实际上并未使用.

目前,我想到的唯一解决方案是进行某种双重检查锁定,即在有人尝试使用(即不使用@Autowired)或(可能更好)进行“手动”操作时,从Spring应用程序上下文中明确要求Client bean.客户端内部的延迟加载.

问题:是否存在“弹簧”方式来推迟客户端的初始化,直到其任何一种方法被实际调用(例如,像惰性加载之类的东西对于休眠集合起作用)?

我正在使用Spring 4.

解决方法:

编辑:
最简单的方法是@ComponentScan(lazyInit = true,basePackages = …).

先前的答案:
http://docs.spring.io/spring/docs/3.0.x/javadoc-api/org/springframework/aop/target/LazyInitTargetSource.html
在第一次实际使用之前,不会创建由LazyInitTargetSource包裹的bean.
如何用这种包装纸很好地包裹大多数豆子?一种可能的方法是创建自己的BeanFactoryPostProcessor …

标签:lazy-loading,spring,java
来源: https://codeday.me/bug/20191029/1961139.html