Spring学习笔记(二):IOC-2

栏目: Java · 发布时间: 7年前

内容简介:本作品采用感谢:本文作者:低调小熊猫

本作品采用 知识共享署名 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Clean Architecture

Clean Architecture

Robert C. Martin / Prentice Hall / 2017-9-20 / USD 34.99

Practical Software Architecture Solutions from the Legendary Robert C. Martin (“Uncle Bob”) By applying universal rules of software architecture, you can dramatically improve developer producti......一起来看看 《Clean Architecture》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具