当前位置:
首页 >
【Spring注解系列03】@Scope与@Lazy
发布时间:2025/3/20
41
豆豆
生活随笔
收集整理的这篇文章主要介绍了
【Spring注解系列03】@Scope与@Lazy
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
1.@Scope与@Lazy
@Scope
对象实例作用域,默认是单实例的。
取值有四个: /*** @see ConfigurableBeanFactory#ConfigurableBeanFactory#SCOPE_PROTOTYPE * @see ConfigurableBeanFactory#SCOPE_SINGLETON * @see org.springframework.web.context.WebApplicationContext#SCOPE_REQUEST request* @see org.springframework.web.context.WebApplicationContext#SCOPE_SESSION sesssion** @Scope:调整作用域* prototype:多实例的:ioc容器启动并不会去调用方法创建对象放在容器中。* 每次获取的时候才会调用方法创建对象;* singleton:单实例的(默认值):ioc容器启动会调用方法创建对象放到ioc容器中。* 以后每次获取就是直接从容器(map.get())中拿,* request:同一次请求创建一个实例* session:同一个session创建一个实例*/@Lazy
懒加载只针对单实例bean,对于单实例bean默认在容器启动的时候创建对象;
标注@Lazy后,容器启动不创建对象。第一次使用(获取)Bean创建对象,并初始化;
lazy和scope等价于
<beans><bean id="person" class="com.java.model.Person" scope="singleton" lazy-init="false"><property name="id" value="11111"></property><property name="name" value="vhsj"></property></bean></beans>
2.实例
配置类:
@Configuration public class BeanScopeLazyConfig {//单例注入@Scope@Beanpublic Person single(){return new Person("id111","初始化111");}//多实例@Scope("prototype")@Beanpublic Person many(){return new Person("id222","初始化222");}//----------------------测试@Lazy在单例注入中的作用@Scope@Beanpublic Person noLazy(){System.out.println("noLazy--->配置类中初始化.....");return new Person("id3","初始化3");}@Lazy@Scope@Beanpublic Person lazy(){System.out.println("lazy--->配置类中初始化.....");return new Person("id4","初始化4");} }测试类:
public class BeanScopeLazyConfigTest {public static void main(String[] args) {ApplicationContext applicationContext = new AnnotationConfigApplicationContext(BeanScopeLazyConfig.class);System.out.println("env----->容器初始化完毕.......");System.out.println();System.out.println("----------------------------->验证单例和多实例----------------------");Person single = (Person) applicationContext.getBean("single");Person single2 = (Person) applicationContext.getBean("single");System.out.println("single---->" + single);System.out.println("single2---->" + single2);System.out.println("single==single2---->" + (single == single2));Person many = (Person) applicationContext.getBean("many");Person many2 = (Person) applicationContext.getBean("many");System.out.println("many---->" + many);System.out.println("many2---->" + many2);System.out.println("many==many2---->" + (many == many2));System.out.println("----------------------------->验证单例和多实例----------------------");System.out.println();System.out.println("----------------------------->验证单例懒加载@Lazy----------------------");Person noLazy = (Person) applicationContext.getBean("noLazy");Person lazy = (Person) applicationContext.getBean("lazy");} }测试结果:
我们可以看到,在容器初始化完成前就加载了非懒加载的实例noLazy,而标有@Lazy的类,在获取时才加载。
对于单例和多实例,可以看到单例对象是相等的,而多实例中是不相等的
noLazy--->配置类中初始化..... env----->容器初始化完毕.......----------------------------->验证单例和多实例---------------------- single---->Person{id='id111', name='初始化111'} single2---->Person{id='id111', name='初始化111'} single==single2---->true many---->Person{id='id222', name='初始化222'} many2---->Person{id='id222', name='初始化222'} many==many2---->false ----------------------------->验证单例和多实例--------------------------------------------------->验证单例懒加载@Lazy---------------------- lazy--->配置类中初始化.....
总结
以上是生活随笔为你收集整理的【Spring注解系列03】@Scope与@Lazy的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 【Spring注解系列02】@Compe
- 下一篇: 【Spring注解系列04】@Condi