• 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);
    
        }
  • 相关阅读:
    Codeforces Round #297 (Div. 2) 525C Ilya and Sticks(脑洞)
    全栈必备 JavaScript基础
    2014-04-19编程之美初赛题目及答案解析
    doT js模板入门 2
    一篇关于arc下内存管理的老文章,包含各种冷门修饰符(关于内存),写的较好,mark
    MyBatis官方教程及源代码解析——mapper映射文件
    Android中图片的三级缓存策略
    python字符串/元组/列表/字典互转
    关于字节对齐的理解
    阿里云服务器ecs配置之安装redis服务
  • 原文地址:https://www.cnblogs.com/lyb0103/p/7611097.html
Copyright © 2020-2023  润新知