1、配置文件详解

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
 <bean name="student" class="pers.zhb.domain.Student"></bean>
</beans>

(1)<bean>:使用该容器描述需要Spring管理的对象

(2)<name>:给被管理的对象去一个名字,方便获取对象,该名字可以重复,可以使用特殊字符。

(3)<id>:与name属性的作用相同,但是属性的值不能重复,不能使用特殊字符。

(4)<class>:被管理对象的完整类名。

2、Spring创建对象的方式

(1)空参构造:

创建一个Student对象,里面含有空参的构造方法:

public class Student {
    private String snum;
    private String sname;
    private String sex;
    public Student(){
        System.out.println("我是Student类的空参构造方法!");
    }

    public String getSnum() {
        return snum;
    }

    public void setSnum(String snum) {
        this.snum = snum;
    }

    public String getSname() {
        return sname;
    }

    public void setSname(String sname) {
        this.sname = sname;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }
    @Override
    public String toString() {
        return "Student{" +
                "snum='" + snum + '\'' +
                ", sname='" + sname + '\'' +
                ", sex='" + sex + '\'' +
                '}';
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
 <bean name="student" class="pers.zhb.domain.Student"></bean>
</beans>

创建测试类:

public class Test {
    public void test1(){
        ApplicationContext applicationContext=new
                ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象
        Student student=(Student)applicationContext.getBean("student");
        student.setSname("zhai");
        student.setSnum("202012");
        student.setSex("nv");
        System.out.println(student);
    }
    public static void main(String[] args){
        Test test=new Test();
        test.test1();
    }
}

该类创建了Spring容器,并且从容器中获取到了Student对象。

Spring(配置详解、创建对象的方式、scope属性、生命周期属性、配置文件的分模块)_测试类

 

 从测试结果可以看出,该方法是利用空参构造的方式来创建对象的。

(2)静态工厂方式创建:

与空参构造的方式不同,静态工厂的创建方式需要自己创建一个类,在该类中产生一个对象并返回。而空参构造的方式是Spring容器采用看参构造的方式创建的,不需要自己创建方法来产生对象。

import pers.zhb.domain.Student;
public class StudentFactory {
    public static Student creatStudent(){
        System.out.println("采用静态工厂的方式创建Student对象!");
        return new Student();
    }
}

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
 <bean name="student" class="pers.zhb.hello.StudentFactory" factory-method="creatStudent"></bean>
</beans>

指明了产生对象的类和该类的方法。

Spring(配置详解、创建对象的方式、scope属性、生命周期属性、配置文件的分模块)_xml_02

 

 (3)实例工厂方式创建:

创建一个类,该类中的方法产生Student对象,不过,该方法不是静态的。

public class StudentFactory {
    public  Student creatStudent(){
        System.out.println("采用实例工厂的方式创建Student对象!");
        return new Student();
    }
}

配置文件:

 <bean name="student"
 factory-bean="stuFactory"
 factory-method="creatStudent"
 >
 </bean>
<!--创建StudentFactory对象-->
 <bean name="stuFactory"
      class="pers.zhb.hello.StudentFactory"
 >
<bean name="stuFactory" class="pers.zhb.hello.StudentFactory">产生StudentFactory对象,此时配置文件调用工厂类,产生工厂类对象。上面的代码调用该工厂类对象并
调用产生Student对象的方法产生Student对象。

3、Spring配置文件scope属性

(1)singleton(单例对象,默认值)

配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="student" class="pers.zhb.domain.Student" scope="singleton"></bean>
</beans>

测试类:

public class Test {
    public void test1(){
        ApplicationContext applicationContext=new
                ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象
        Student student=(Student)applicationContext.getBean("student");
        Student student1=(Student)applicationContext.getBean("student");
        System.out.println(student==student1);
    }
    public static void main(String[] args){
        Test test=new Test();
        test.test1();
    }
}

在测试类的方法中,创建了两个对象,返回值为true,也就是说为单例对象。

(2)prototype:多例对象

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="student" class="pers.zhb.domain.Student" scope="prototype"></bean>
</beans>

每次调用的时候才会创建对象,且每次创建的时候都不是同一个对象。

(3)request:web环境下,对象的生命周期与requst一样

(4)session:web环境下,对象的生命周期与session一样

4、生命周期属性

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.2.xsd ">
<bean name="student" class="pers.zhb.domain.Student" destroy-method="destory" init-method="init"></bean>
</beans>

init方法是生命周期的初始化方法,Spring会在对象创建之后立即调用,destory方法在Spring容器关闭并销毁所有对象前调用。

测试类:

public class Test {
    public void test1(){
        ApplicationContext applicationContext=new
                ClassPathXmlApplicationContext("applicationContext.xml");//创建容器对象
        Student student=(Student)applicationContext.getBean("student");
        ((ClassPathXmlApplicationContext) applicationContext).close();
    }
    public static void main(String[] args){
        Test test=new Test();
        test.test1();
    }
}

Spring(配置详解、创建对象的方式、scope属性、生命周期属性、配置文件的分模块)_配置文件_03

 

 5、分模块

 <import resource="路径"></import>

分模块即引入其他配置文件,这样的话所有的配置文件不用写在一个配置文件中,只需要引入即可。

 

6、Bean的种类

(1)普通Bean

之前操作的都是普通Bean,spring直接创建实例并返回

(2)FactoryBean:是一个特殊的Bean,具有工厂生成对象的能力,只能生成特定的对象,bean必须使用FactoryBean接口,此接口提供方法getObject()用于获得特定的bean

 

7、BeanFactory和FactoryBean对比
BeanFactory:工厂,用于生成任意bean

FactoryBean:特殊Bean,用于生成另一个特定的Bean

 

每个人都会有一段异常艰难的时光 。 生活的压力 , 工作的失意 , 学业的压力。 爱的惶惶不可终日。 挺过来的 ,人生就会豁然开朗。 挺不过来的 ,时间也会教你 ,怎么与它们握手言和 ,所以不必害怕的。 ——杨绛