spring ioc 单例 和多例模式学习
spring ioc中默认为单例,当scope设置为prototype的时为多例,设置为多例时,对象的创建时发生改变,无论lazy-init为什么值,都是在context.getBean();时创建对象
多例模式例子:
package zju_001.maven_test_1;import org.springframework.context.ApplicationContext;import org.springframework.context.annotation.Scope;import org.springframework.context.support.FileSystemXmlApplicationContext;import org.springframework.stereotype.Component; @Component(value="user") //<bean id="user" class=""> //@Scope(value="prototype") //创建多实例 public class User { private String name; private int id; public void fun() { System.out.println("dao"); } public User() { System.out.println("初始化User实例"); } public String getName() { retu name; } public void setName(String name) { this.name = name; System.out.println("name is"+ name); } public int getId() { retu id; } public void setId(int id) { this.id = id; System.out.println("id is "+id); } public static void main(String[] args) { System.out.println("加载context文件"); ApplicationContext context = new FileSystemXmlApplicationContext("src\\bean1.xml"); System.out.println("第1个ioc"); User u1=(User) context.getBean("user"); u1.setId(123); System.out.println("第2个ioc"); User u2=(User) context.getBean("user"); u2.setId(456); System.out.println("u1的id是:"+u1.getId()); System.out.println("u1的id是:"+u2.getId()); } }
输出为:
第1个ioc初始化User实例id is 123第2个ioc初始化User实例id is 456u1的id是:123u2的id是:456
单例模式情况:
没有设置:@Scope(value="prototype")
输出为:
初始化User实例第1个iocid is 123第2个iocid is 456u1的id是:456u1的id是:456
可以看到差别是,单例模式中, 初始化在加载context文件时发生,而多例模式中,初始化在ioc是发生。
并且,单例模式 两次给不同的变量进行注入后,实际上两个变量指向同一个实例,改变其中一个另一个也改变。
作者:var1994
来源链接:https://blog.csdn.net/var1994/article/details/80255693
版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。
2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。