内容简介:本作品采用感谢:本文作者:低调小熊猫
本作品采用 知识共享署名 4.0 国际许可协议 进行许可。
感谢: Java大联盟
本文作者:低调小熊猫
文章链接: https://aodeng.cc/archives/springer
转载声明:自由转载-非商用-非衍生-保持署名,非商业转载请注明作者及出处,商业转载请联系作者本人qq:2696284032
Spring IOC-2
Spring中的bean是根据scope来生成的,表示bean的作用域。
1.singleton:单例,表示通过Spring容器获取的该对象是唯一的。
2.prototype:原型,表示通过Spring容器获取的对象都是不同的。
3.reqeust:请求,表示在一次http请求内有效。
4.session:会话,表示在一个用户会话内有效。
3和4只适用于web项目,大多数情况下,我们只会使用singleton和prototype两种scope,并且scope的默认值是singleton。
我们通过一个例子来学习这两种配置的区别
单例模式
spring.xml
<bean id="user" class="com.southwind.entity.User"> <property name="id" value="1"></property> <property name="name" value="张三"></property> <property name="age" value="23"></property> </bean>
main
通过Spring容器获取两个User实例化对象user1和user2,并且通过==方法判断是否为同一个对象。
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring.xml"); User user = (User) applicationContext.getBean("user"); User user2 = (User) applicationContext.getBean("user"); System.out.println(user == user2);
结果
结果打印true,并且User的构造函数只执行了一次,表示user1和user2是同一个对象,所以scope默认值为singleton,即默认通过Spring容器创建的对象都是单例模式。
原型模式
修改spring.xml中的配置,将scope改为prototype。
<bean id="user" class="com.southwind.entity.User" scope="prototype"> <property name="id" value="1"></property> <property name="name" value="张三"></property> <property name="age" value="23"></property> </bean>
结果
调用了两次构造函数,并且==的结果为false,表示现在的user1和user2是两个对象,说明bean的作用域是原型模式
Spring的继承
user2继承了user1的所有属性
<bean id="user" class="com.southwind.entity.User"> <property name="id" value="1"></property> <property name="name" value="张三"></property> <property name="age" value="23"></property> </bean> <bean id="user2" class="com.southwind.entity.User" parent="user"></bean>
继承的时候还可以覆盖属性
<bean id="user" class="com.southwind.entity.User"> <property name="id" value="1"></property> <property name="name" value="张三"></property> <property name="age" value="23"></property> </bean> <bean id="user2" class="com.southwind.entity.User" parent="user"> <!-- 覆盖name属性 --> <property name="name" value="李四"></property> </bean>
这样name的值张三就被李四覆盖了
Spring中的bean能不能在不同类之间继承?
答案是可以,但是需要这两个类的属性列表完全一致,否则会报错,实际开发中并不会使用到这种方式。
spring中bean的依赖
<bean id="user" class="com.southwind.entity.User" depends-on="car"> <property name="id" value="1"></property> <property name="name" value="张三"></property> <property name="age" value="23"></property> </bean> <bean id="car" class="com.southwind.entity.Car"> <property name="id" value="1"></property> <property name="brand" value="宝马"></property> </bean>
User依赖于Car,所以必须先创建Car对象,User对象才能完成依赖。
p命名空间
记得在beans中添加 xmlns:p=” http://www.springframework.org/schema/p"
public class User { private int id; private String name; private int age; private Car car; }
<bean id="user" class="com.southwind.entity.User" p:id="1" p:name="张三" p:age="23" p:car-ref="car"></bean> <bean id="car" class="com.southwind.entity.Car" p:id="1" p:brand="宝马"></bean>
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 【每日笔记】【Go学习笔记】2019-01-04 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-02 Codis笔记
- 【每日笔记】【Go学习笔记】2019-01-07 Codis笔记
- Golang学习笔记-调度器学习
- Vue学习笔记(二)------axios学习
- 算法/NLP/深度学习/机器学习面试笔记
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
What Technology Wants
Kevin Kelly / Penguin Group (USA) Incorporated / 2010-10-14 / USD 27.95
A refreshing view of technology as a living force in the world. This provocative book introduces a brand-new view of technology. It suggests that technology as a whole is not a jumble of wires and ......一起来看看 《What Technology Wants》 这本书的介绍吧!