spring学习4 —— IoC特性

从b站学习springcloud,现在进行总结,该总结除去了视频中出现的小错误,对有些易错的地方进行了提醒
b站链接:https://www.bilibili.com/video/BV1Gt411N7HF?p=2
资料链接:
https://pan.baidu.com/s/1o0Aju3IydKA15Vo1pP4z5w
提取码: 21ru

上一节链接:
下一节链接:

下面的内容总结:

给 bean 注入集合:(即,地址可以是多个,而不是单个)

1 在 resources/ spring.xml 中,加入代码:

    <bean id="address2" class="com.southwind.entity.Address">
        <property name="id" value="2"></property>
        <property name="name" value="高新区"></property>
    </bean>

2 在 entity/ Student 中,修改代码:

	private List<Address> addressess;

3 在 resources/ spring.xml 中,加入代码:

        <property name="addressess">
            <list>
                <ref bean="address"></ref>
                <ref bean="address2"></ref>
            </list>
        </property>

4 在 test/ Test 中:
getBean("student3"); 改为 getBean("student");

启动 test/ Test:

scope 作用域

Spring 管理的 bean 根据 scope 生成,表示 bean 的作用域,共4种,默认 singleton

4种解释
singleton单例,IoC 容器获取的 bean 唯一
prototype原型,IoC 容器获取的 bean 可以不同
request请求,1次 HTTP 请求内有效
session回话,1个用户会话内有效

request、session 只适用 Web 项目,大多情况下,单例、原型用的较多

singleton,无论业务代码是否获取 IoC 容器中的 bean,Spring 加载 spring.xml 时就会创建 bean

prototype,业务代码获取 IoC 容器中的 bean 时,Spring 才去调用无参构造 创建对应的 bean

1.1 在 resources/ spring.xml 中,加入代码:
scope="singleton"

1.2 在 test/ Test 中
getBean("student"); 改为 getBean("student2");

启动 test/ Test:

1.3 在 test/ Test 中,加入代码:

		Student student1=(Student) applicationContext.getBean("student2");
        System.out.println(student == student1);

启动 test/ Test:

说明:scope="singleton" 时,2个对象相同,唯一,值是一样的,地址一样,名字可以不同

2.1 在 resources/ spring.xml 中,加入代码:
scope="singleton" 变成 scope="prototype"

启动 test/ Test:

说明:scope="prototype" 时,2个对象不同,地址不同

继承

同1个类内、不同类,均可继承
1.1 在 resources/ spring.xml 中,加入代码:

<bean id="student2" class="com.southwind.entity.Student">
        <property name="id" value="1"></property>
        <property name="name" value="李四132"></property>
        <property name="age" value="22"></property>
        <property name="addressess">
            <list>
                <ref bean="address"></ref>
                <ref bean="address2"></ref>
            </list>
        </property>
    </bean>

    <bean id="stu" class="com.southwind.entity.Student" parent="student2">
        <property name="name" value="李四1"></property>
    </bean>

1.2 test/ Test 中,加入代码:

		Student student=(Student) applicationContext.getBean("student2");
        System.out.println(student);

        Student stu=(Student) applicationContext.getBean("stu");
        System.out.println(stu);

启动 test/ Test:

红框 均为继承

2 再写1个类 User,必须包含 类 Student 中所有属性
在 resources/ spring.xml 中 User 就可以 继承 student2
<bean id="user" class="com.southwind.entity.User" parent="student2"></bean>

依赖

1 在 entity 中新建 实体类 User,加入代码:

package com.southwind.entity;

import lombok.Data;

import java.util.List;

@Data
public class User {
    private long id;
    private String name;
    private int age;
    private List<Address> addressess;

    public User(){
        System.out.println("User对象创建");
    }
}

2 在 entity/ Student 中,加入代码:

    public Student(){
        System.out.println("Student对象创建");
    }

3 在 resources 中,再复制1份 spring.xml,命名为 spring-depends.xml,内容删除,加入代码为:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="student" class="com.southwind.entity.Student"></bean>
    
    <bean id="user" class="com.southwind.entity.User"></bean>

</beans>

4 在 test 中 创建 类 Test2

用红框的,不要用第1行的,那是之前我们手动写的!
加入代码:

package com.southwind.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test2 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-depends.xml");
    }
}

启动 test/ Test2:

其顺序就是 xml 文件中的顺序

5 依赖谁,谁先被创建,在 spring-depends.xml 中加入:depends-on="user"

启动 test/ Test2:

student 依赖 user,所以 user 先创建,可以不顾 xml 文件的顺序

p 命名空间

1 在 resources 中,新建 spring-p.xml,加入代码:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:p="http://www.springframework.org/schema/p"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="student" class="com.southwind.entity.Student" p:id="1" p:name="张三asd" p:age="22" p:addressess-ref="address"></bean>

    <bean id="address" class="com.southwind.entity.Address" p:id="2" p:name="解放路"></bean>
</beans>

p:id 相当于 <property name="id" value="1"></property>

2 在 test 新建 类 Test3,加入代码:

package com.southwind.test;

import com.southwind.entity.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class Test3 {
    public static void main(String[] args) {
        ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-p.xml");
        Student student = (Student)applicationContext.getBean("student");
        System.out.println(student);
    }
}

启动 test/ Test3:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_1403034144

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值