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);

    }
时间: 2024-10-24 11:47:41

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

SpringMvc的创建流程以及2种加载配置文件的方式

1.首先创建个web项目,第一步导入相应的jar包,并且buildtoPath 2.用elipse或myeclipse点击进入web.xml中 按住 Alt+ / 有个提示 找到前面带 #DispatcherServlet 并按回车键,自动生成. 按我这个方式对比修改一下,首先解释一下, <load-on-startup>1</load-on-startup> load-on-startup标记容器是否在启动的时候实例化并调用其init()方法的优先级. 它的值表示servlet应

Spring 加载配置文件的方式

我们常用的加载context文件的方法有如下三个: 1.FileSystemXmlApplicationContext 这个方法是从文件绝对路径加载配置文件,例如: ApplicationContext ctx = new FileSystemXmlApplicationContext( "G:/Test/applicationcontext.xml "); 如果在参数中写的不是绝对路径,那么方法调用的时候也会默认用绝对路径来找,我测试的时候发现默认的绝对路径是eclipse所在的路径

Java 加载配置文件的方式

一 使用原生方式读取配置文件 1 文件系统加载 Java代码 InputStream in = new FileInputStream("config.properties"); Properties p = new Properties(); p.load(in); 2 类加载方式 A 与类同级目录 Java代码 InputStream in = Main.class.getResourceAsStream("config.properties"); B 在类的下

angularJS1笔记-(19)-angular异步加载包的方式

我们平时写的导入包的方式都是同步方式,有时候会显得过于卡顿,这样我们就可以使用异步加载的方式. script.js方式: 执行结果为: 异步加载还可以加载多个即为script([,,,],function(){})的形式,这样有可能会出现的问题是如果一个包比较小的话那么会率先加载下来而如果这个包依赖与其他未被下载下来的包的话就会出现找不到文件的错误. 一种解决方案为嵌套方式决定先后顺序: 还有一种方式就是引入angular-loader.js库这个库只需要你在上面引入后则会自动处理script(

ios 图片的两种加载方式

控件加载图片,plist,懒加载,序列帧动画,添加动画效果. IOS中有2种加载图片的方式. 方式一:有缓存(图片所占用的内存会一直停留在程序中) [objc] view plaincopy + (UIImage *)imageNamed:(NSString *)name; 注:必须是png文件.需要把图片添加到 images.xcassets中 例如: [objc] view plaincopy @property (weak, nonatomic) IBOutlet UIImageView 

Spring Boot加载配置文件的完整步骤

这篇文章主要给大家介绍了关于Spring Boot加载配置文件的完整步骤,文中通过示例代码介绍的非常详细,对大家的学习或者使用Spring Boot具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧 前言 本文针对版本2.2.0.RELEASE来分析SpringBoot的配置处理源码,通过查看SpringBoot的源码来弄清楚一些常见的问题比如: SpringBoot从哪里开始加载配置文件? SpringBoot从哪些地方加载配置文件? SpringBoot是如何支持yaml和proper

spring加载配置文件

spring加载配置文件 1.把applicationContext.xml直接放在WEB-INF/classes下,spring会采用默认的加载方式2.采用在web.xml中配置ContextLoaderListenera或ContextLoaderServlet指定加载路径方式.3 通过ClassPathXmlApplicationContext或XmlWebApplicationContext代码动态加载!

org.apache.hadoop.yarn.conf.ConfigurationProviderFactory分析加载配置文件两种方式

ConfigurationProviderFactory结构如下: /** * Creates an instance of {@link ConfigurationProvider} using given * configuration. * @param bootstrapConf * @return configurationProvider */ @SuppressWarnings("unchecked") public static ConfigurationProvide

Spring的classpath与classpath*通配符加载配置文件

classpath 与 classpath*以及通配符是怎么处理的 Spring加载Resource文件是通过ResourceLoader来进行的,那么我们就先来看看ResourceLoader的继承体系,让我们对这个模块有一个比较系统的认知. 首先,我们来看下ResourceLoader的源码 public interface ResourceLoader { /** Pseudo URL prefix for loading from the class path: "classpath:&