Spring笔记02(3种加载配置文件的方式)

Posted 迷茫王子

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring笔记02(3种加载配置文件的方式)相关的知识,希望对你有一定的参考价值。

1.不使用Spring的实例:

01.Animal接口对应的代码:

package cn.pb.dao;

/**
 * 动物接口
 */
public interface Animal {
    //吃饭
    String eat();
    //睡觉
    void sleep();
}

 

02.Animal接口的实现类Dog对应的代码:

package cn.pb.dao.impl;
/**
 * animal的实现类
 */

import cn.pb.dao.Animal;

public class Dog implements Animal{
    /**
     * 无参构造 验证什么时候实例被创建
     */
    public Dog(){
        System.out.println("dog被实例化了!");
    }

    public String eat() {
        System.out.println("吃饭的方法");
        return null;
    }

    public void sleep() {
        System.out.println("睡觉的方法");
    }


}

03.测试的代码:

1  @Test
2     public  void  test01(){
3         //之前的一种方式    耦合的!
4         Animal animal=new Dog();
5         animal.eat();
6         animal.sleep();
7     }

2.使用spring解耦的方式 创建applicationContext.xml文件 放在src的根目录下

01.Animal接口对应的代码:

package cn.pb.dao;

/**
 * 动物接口
 */
public interface Animal {
    //吃饭
    String eat();
    //睡觉
    void sleep();
}

 

02.Animal接口的实现类Dog对应的代码:

package cn.pb.dao.impl;
/**
 * animal的实现类
 */

import cn.pb.dao.Animal;

public class Dog implements Animal{
    /**
     * 无参构造 验证什么时候实例被创建
     */
    public Dog(){
        System.out.println("dog被实例化了!");
    }

    public String eat() {
        System.out.println("吃饭的方法");
        return null;
    }

    public void sleep() {
        System.out.println("睡觉的方法");
    }


}

03.applicationContext.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就是我们的一个标识
    class是对应的实现类,class不能是接口
  lazy-init="true" 默认是false 按需加载,就是在getBean的时候才会创建实例
  -->
<bean id="dog" class="cn.pb.dao.impl.Dog" ></bean> </beans>

 

04.测试的代码:

001.applicationContext.xml放在项目的根路径下面

 @Test
    public void test02(){
         /*
         * 使用spring  对象交给容器来创建 解耦
         * 01.引入jar
         * 02.创建容器applicationContext.xml
         * 03.加载spring的配置文件  创建容器   会把容器中所有的bean实例化
         * 04.然后从容器中取Bean
         */
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");

        System.out.println("**************");
        //因为我们在容器中定义了ID  根据id找到对应的类
        Animal dog=(Dog)context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

 

002.applicationContext.xml放在项目的根路径下面

 @Test
    public  void  test03(){
        /**
         * 默认applicationContext.xml放在项目的根路径下面
         * 也可以放在电脑指定的盘符下d:/applicationContext.xml
         * 使用new FileSystemXmlApplicationContext来创建对象
         */

        ApplicationContext context=new FileSystemXmlApplicationContext("d:/applicationContext.xml");
        System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

 

003.使用BeanFactory来创建容器的时候,不会实例化容器中所有的Bean,

在getBean()才创建对应Bean的对象,按需加载。

 @Test
    public  void  test04(){
        /*
         * 使用BeanFactory来创建容器的时候,不会实例化容器中的Bean
         * 在getBean()才创建对应Bean的对象
         */
        BeanFactory context=new XmlBeanFactory(new ClassPathResource("applicationContext.xml"));
        System.out.println("*************************");
        //因为我们在容器中定义了ID  根据id找到对应的类
        Animal dog=(Animal) context.getBean("dog");
        dog.eat();
        dog.sleep();
    }

 

05.在spring的核心配置文件中 所有的bean默认都是单例模式:

001.applicationContext.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就是我们的一个标识
    class是对应的实现类,class不能是接口
    -->

    <!--配置我们的student对象   lazy-init="true" 默认是false 按需加载-->
    <bean id="student" class="cn.pb.bean.Student" lazy-init="true">
        <property name="name" value="小黑"></property>
        <property name="age" value="18"></property>
    </bean>

    <!-- 在spring的核心配置文件中  所有的bean默认都是单例模式
       scope="singleton"  默认
       scope="prototype"  原型
       -->
    <bean id="student2" class="cn.pb.bean.Student" scope="singleton">
        <property name="age" value="40"/>
        <property name="name" value="小黑2"/>
    </bean>


</beans>

 

002.验证代码:

/**
     *  验证单例模式
     *  01.默认是单例  调用同一个对象 输出true
     *  02.之后再xml文件中的student2  增加属性scope="prototype"
     *  03.再次验证  两个对象肯定不一致 输出false
     */
    @Test
    public   void  studentTest5(){
        ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println("*******************************************");
        Student student = (Student) context.getBean("student2");
        System.out.println(student);
        Student  student2 = (Student) context.getBean("student2");  //再次获取
        System.out.println(student==student2);

    }

 


以上是关于Spring笔记02(3种加载配置文件的方式)的主要内容,如果未能解决你的问题,请参考以下文章

spring in action学习笔记十五:配置DispatcherServlet和ContextLoaderListener的几种方式。

spring加载配置文件

Spring详解加载配置文件

Spring Boot 配置加载顺序详解

在web.xml正确加载spring配置文件的方式

Spring加载Properties配置文件的三种方式