【发布时间】:2014-05-04 17:00:12
【问题描述】:
我希望只有在实际使用后(而不是仅在自动装配时)才初始化(单例)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进行双重检查锁定在Client 中进行“手动”延迟加载。
问题:有没有一种“弹簧”方式来推迟客户端的初始化,直到它的任何方法被实际调用(例如,像延迟加载这样的东西适用于休眠集合)?
我正在使用 Spring 4。
【问题讨论】:
-
打开参考文档(单页):docs.spring.io/spring/docs/4.0.x/spring-framework-reference/…。然后按Ctrl-F。然后输入“懒惰”。然后按 F3 直到您在文档中找到您要查找的内容。
-
您也可以阅读您已经在使用的 Lazy 注释的 javadoc。
标签: java spring lazy-loading