@Lazy
是 Spring 框架中的一个注解,主要用于控制 Bean 的延迟初始化。它的作用如下:
- 延迟初始化:默认情况下,Spring 会在应用启动时初始化所有的单例 Bean。使用
@Lazy
注解后,Spring 会延迟初始化该 Bean,直到它第一次被使用时才进行初始化。 - 减少启动时间:通过延迟初始化,可以减少应用启动时的初始化时间,尤其是当某些 Bean 的初始化过程较为耗时或资源密集时。
- 避免不必要的初始化:某些 Bean 可能只在特定条件下才会被使用,使用
@Lazy
可以避免在不需要时进行初始化,从而节省资源。
使用场景
- 大对象或耗时对象:如果某个 Bean 的初始化过程非常耗时或占用大量资源,可以使用
@Lazy
延迟其初始化。 - 条件性依赖:如果某个 Bean 只在特定条件下才会被使用,可以使用
@Lazy
避免不必要的初始化。
示例
@Component
@Lazy
public class MyService {
public MyService() {
System.out.println("MyService initialized!");
}
public void doSomething() {
System.out.println("Doing something...");
}
}
在这个例子中,MyService
Bean 不会在应用启动时初始化,只有在第一次被注入或使用时才会初始化。
配置方式
- 类级别:在类上使用
@Lazy
注解,表示该类的所有 Bean 都延迟初始化。 - 方法级别:在
@Bean
注解的方法上使用@Lazy
,表示该 Bean 延迟初始化。 - 注入点:在
@Autowired
或@Inject
的注入点上使用@Lazy
,表示该依赖延迟初始化。
注意事项
- 原型 Bean:对于原型(Prototype)Bean,
@Lazy
的行为与单例 Bean 不同,因为每次请求原型 Bean 时都会创建一个新的实例。 - 循环依赖:在存在循环依赖的情况下,使用
@Lazy
可以解决某些初始化顺序问题。
总结来说,@Lazy
注解主要用于优化应用启动时间和资源使用,特别是在处理大对象或条件性依赖时非常有用。
THE END
暂无评论内容