我的模型层正被一些不同的项目使用,我想为模型使用单个XML Spring配置文件,而不管哪个项目正在使用它.
我的问题是:由于并非所有bean都在所有项目中使用,我是否在没有实例化的情况下浪费资源到任何重要数量?我不太确定Spring是如何加载它们的,因为它直到现在才成为一个问题.
有任何想法吗?
摘自Spring参考手册:
ApplicationContext实现的默认行为是在启动时急切地预先实例化所有单例bean.预实例化意味着ApplicationContext将急切地创建和配置其所有单例bean作为其初始化过程的一部分.通常这是一件好事,因为这意味着将立即发现配置或周围环境中的任何错误(而不是可能是几小时甚至几天).
但是,有时候这种行为不是想要的.如果您不希望在使用ApplicationContext时预先实例化单例bean,则可以通过将bean定义标记为延迟初始化来有选择地控制它.一个延迟初始化的bean向IoC容器指示是否应该在启动时或首次请求时创建bean实例.
通过XML配置bean时,这个延迟加载由[bean元素]上的'lazy-init'属性控制; 例如:
但是,除非您的bean使用文件锁或数据库连接等资源,否则我不会过分担心简单的内存开销,如果您更容易为多个(但不同的)配置文件配置这一配置.
除了其他注释之外:还可以通过在
元素上使用'default-lazy-init'属性来指定要延迟初始化的整个配置文件; 例如:
这比将lazy-init
属性添加到每个bean 要容易得多,如果你有很多这样的话.