Spring笔记Day1

1.Spring是什么?它的特点和优势分别是?

1.1 Spring是什么?

1.2 Spring的优点。

2.耦合是什么意思?

3.Spring核心是什么?

4.IOC是什么含义?


         提到控制就要理解控制的含义,控制就是对象的创建、初始化、销毁。创建对象,原来是 new 一个,现在给 Spring 容器创建了;对象初始化,比如 A 依赖 B,原来是我们通过构造器或者 setter 方法赋值,现在给 Spring 容器自动注入了;销毁对象,原来是我们直接赋值 null 或者做一些销毁操作,现在给 Spring 容器管理生命周期负责销毁。明白了吧,IOC 解决了繁琐的对象生命周期的操作,解耦了我们的代码。

5.DI是什么?和IOC有什么区别?

IOC:控制反转,指将对象的创建权,反转到spring容器。

DI:依赖注入,指在创建对象的过程中,将对象依赖的属性通过配置进行注入。DI的实现依赖于IOC,先有控制反转才有依赖注入

6.属性注入的方式有哪些?

6.1 使用set方法进行注入

package com.Keafmd.spring5;

public class Book {

	//创建属性
    private  String bname;
    private String bauthor;
    private String address;

    //1、set方法注入
    //创建对应的set方法
    public void setBname(String bname) {
        this.bname = bname;
    }

    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void testdemo(){
        System.out.println(bname+" "+bauthor+" "+address);
    }
}

 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="book" class="com.Keafmd.spring5.Book">
        <property name="bname" value="书名"></property>
        <property name="bauthor" value="作者"></property>

        <!--  向属性注入null值-->
        <!--<property name="address" >
            <null/>
        </property>-->
        
		<!-- <property name="address" value="&lt;&lt;北京&gt;&gt;"></property> -->

        <property name="address">
            <value><![CDATA[<<北京>>]]></value>
        </property>
    </bean>

</beans>

6.2 使用有参构造函数注入 :

package com.Keafmd.spring5;

public class Orders {
    private String oname;
    private String address;

    public Orders(String oname, String address) {
        this.oname = oname;
        this.address = address;
    }

    public void ordersTest(){
        System.out.println(oname+" "+address);
    }
}

 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="orders" class="com.Keafmd.spring5.Orders">
        <constructor-arg name="oname" value="电脑"/>
        <constructor-arg name="address" value="China"/>
    </bean>

</beans>

6.3 使用P标签空间注入

package com.Keafmd.spring5;

public class Book {

    private  String bname;
    private String bauthor;
    private String address;

    public void setBname(String bname) {
        this.bname = bname;
    }

    public void setBauthor(String bauthor) {
        this.bauthor = bauthor;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public void testdemo(){
        System.out.println(bname+" "+bauthor+" "+address);
    }
}

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">

    <!--三、p名称空间注入属性-->

    <bean id="book" class="com.Keafmd.spring5.Book" p:bname="书名XXX" p:bauthor="作者XXX" p:address="地址XXX">
    </bean>

</beans>

7.Spring管理Bean的作用域。

Spring笔记Day1

当一个bean的作用域为Singleton,那么Spring IoC容器中只会存在一个共享的bean实例,并且所有对bean的请求,只要id与该bean定义相匹配,则只会返回bean的同一实例。
当一个bean的作用域为Prototype,表示一个bean定义对应多个对象实例。Prototype作用域的bean会导致在每次对该bean请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)时都会创建一个新的bean实例。
当一个bean的作用域为Request,表示在一次HTTP请求中,一个bean定义对应一个实例。
当一个bean的作用域为Session,表示在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
当一个bean的作用域为Global Session,表示在一个全局的HTTP Session中,一个bean定义对应一个实例。典型情况下,仅在使用portlet context的时候有效。该作用域仅在基于web的Spring ApplicationContext情形下有效。

8.Spring管理Bean的生命周期。

Spring笔记Day1Bean生命周期图示 

9.如何注入集合属性?

package com.Keafmd.spring5.collectiontype;

import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

public class Stu {

    //1、数组类型属性
    private String[] courses;

    //2、list集合类型属性
    private List<String> list;

    //3、map集合类型属性
    private Map<String,String> maps;

    //4、set集合类型属性
    private Set<String> sets;


    //学生所学的多门课程
    private List<Course> courseList;

    public void setCourseList(List<Course> courseList) {
        this.courseList = courseList;
    }

    public void setCourses(String[] courses) {
        this.courses = courses;
    }

    public void setList(List<String> list) {
        this.list = list;
    }

    public void setMaps(Map<String, String> maps) {
        this.maps = maps;
    }

    public void setSets(Set<String> sets) {
        this.sets = sets;
    }

    public void test(){
        System.out.println(Arrays.toString(courses));
        System.out.println(list);
        System.out.println(maps);
        System.out.println(sets);
        System.out.println(courseList);
    }

}

 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="stu" class="com.Keafmd.spring5.collectiontype.Stu">
        <!--数组类型属性注入-->
        <property name="courses">
            <array>
                <value>Java</value>
                <value>C++</value>
                <value>Python</value>
            </array>
        </property>

        <!--list类型属性注入-->
        <property name="list">
            <list>
                <value>小明</value>
                <value>小红</value>
            </list>
        </property>

        <!--map类型属性注入-->
        <property name="maps">
            <map>
                <entry key="Java" value="java"></entry>
                <entry key="C++" value="c++"></entry>
            </map>
        </property>

        <!--set类型属性注入-->
        <property name="sets">
            <set>
                <value>北京</value>
                <value>上海</value>
            </set>
        </property>

        <!--注入list集合类型,值是对象-->
        <property name="courseList">
            <list>
                <ref bean="course1"></ref>
                <ref bean="course2"></ref>
            </list>
        </property>
    </bean>
    <!--创建多个course对象-->
    <bean id="course1" class="com.Keafmd.spring5.collectiontype.Course">
        <property name="cname" value="Spring5框架"></property>
    </bean>

    <bean id="course2" class="com.Keafmd.spring5.collectiontype.Course">
        <property name="cname" value="MyBatis框架"></property>
    </bean>
</beans>

10.Spring中Bean的两种方式。

首先创建一个student类


@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student implements Serializable {
 
    private static final long serialVersionUID = -2088281526481179972L;
    private int id;
    private String name;
    private int age;
}

在beans.xml中定义Student:

 <!-- 1.空值的student -->
    <bean id="studentNoValue" class="domain.Student"/>
 
    <!-- 2.带值的student -->
    <bean id="student" class="domain.Student">
        <property name="id" value="11"/>
        <property name="age" value="22"/>
        <property name="name" value="jack"/>
    </bean>
 
    <!-- 3.全参构造:使用成员变量名称对应 -->
    <bean id="studentConstruct" class="domain.Student">
        <constructor-arg name="age" value="22"></constructor-arg>
        <constructor-arg name="id" value="11"></constructor-arg>
        <constructor-arg name="name" value="jack"></constructor-arg>
    </bean>
 
    <!-- 4.全参构造:使用成员变量index对应 -->
    <bean id="studentConstruct2" class="domain.Student">
        <constructor-arg index="0" value="11"></constructor-arg>
        <constructor-arg index="1" value="jack"></constructor-arg>
        <constructor-arg index="2" value="22"></constructor-arg>
    </bean>
 
    <!-- 5.全参构造:使用成员变量类型对应 -->
    <bean id="studentConstruct3" class="domain.Student">
        <constructor-arg type="int" value="11"></constructor-arg>
        <constructor-arg type="java.lang.String" value="jack"></constructor-arg>
        <constructor-arg type="int" value="22"></constructor-arg>
    </bean>

上一篇:2021.10.13 Day1


下一篇:【QT】手把手制作一个网络调试助手(UDP设计)