spring注解@lazy,bean懒加载

本文探讨了在单实例bean中使用@Scope注解的singleton属性与@lazy注解的区别。当bean实例在IOC容器创建时加载,或者在第一次使用时才创建的机制,对软件性能和资源管理的影响。

该注解是在单实例bean是使用,当使用@Scope注解的singleton属性时,bean的实例会在IOC容器创建的时候被加载,但是如果在创建bean的时候加上@lazy注解,则bean的实例会在第一次使用的时候被创建。

### Java注解@Resource介绍、使用方法 - **介绍**:@Resource 是 Java EE 标准(JSR - 250)定义的依赖注入注解Spring 框架对其进行了支持。核心作用是通过名称类型匹配 Bean解决Bean 场景下的依赖注入问题 [^1]。 - **使用方法**:可用于成员变量以及 set 方法。若不指定 name 属性,则会把 name 属性值处理为字段名 set 方法标识的字段名称;若指定 type 属性,则 type 属性值必须与字段类型 set 方法返回值类型为父子关系(type 属性值可以是子类,也可以是超类),否则会抛出异常。@Resource 先按照 name 属性值注入,若未找到,则按 type 属性值注入,即默认的 name 指定的 name 找不到 bean,就会按 type 注入 [^3]。 以下是一个简单的使用示例: ```java import javax.annotation.Resource; public class MyClass { // 不指定name属性,默认按字段名注入 @Resource private MyBean myBean; // 指定name属性注入 @Resource(name = "anotherBean") private AnotherBean anotherBean; // 指定type属性注入 @Resource(type = SomeInterface.class) private SomeInterface someInterface; } ``` ### Java注解@Lazy介绍、使用方法 - **介绍**:@Lazy 注解用于实现懒加载。当与 @Autowired 者 @Resource 合用时,依赖创建的是代理对象(目标对象是 TargetSource),在执行时,执行的是代理对象,在 `invoke(Object proxy, Method method, Object[] args)` 中执行 `targetSource.getTarget()` 时才去 beanFactory 中依赖查找 bean [^2]。 - **使用方法**:通常与 @Autowired @Resource 一起使用,也可以用于配置类的 Bean 定义上。 以下是使用示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Component; @Component public class MyService { // 与@Autowired合用 @Autowired @Lazy private MyRepository myRepository; } ``` ### @Resource和@Lazy的区别 - **功能不同**:@Resource 主要用于依赖注入,解决Bean 场景下的依赖注入问题;而 @Lazy 主要用于实现懒加载,延迟 Bean 的创建 [^1][^2]。 - **使用场景不同**:@Resource 用于需要注入 Bean 的地方,如成员变量、set 方法;@Lazy 通常与依赖注入注解一起使用,者用于配置类的 Bean 定义,实现 Bean 的延迟加载 [^2][^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值