美文网首页ssh我爱编程
Spring学习 一 配置文件、基础

Spring学习 一 配置文件、基础

作者: Mon7ey | 来源:发表于2018-04-10 18:26 被阅读31次

    Spring基本使用

    第一步:引入jar包
    源码, jar文件:spring-framework-3.2.5.RELEASE

    commons-logging-1.1.3.jar           日志
    spring-beans-3.2.5.RELEASE.jar        bean节点
    spring-context-3.2.5.RELEASE.jar       spring上下文节点
    spring-core-3.2.5.RELEASE.jar         spring核心功能
    spring-expression-3.2.5.RELEASE.jar    spring表达式相关表
    

    第二步: 写Spring配置文件
    核心配置文件 : applicationContext.xml / bean.xml

    Spring约束:

    约束参考:

    spring-framework-3.2.5.RELEASE\docs\spring-framework-reference\htmlsingle\index.html
    

    完整约束:

    <?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"
        xmlns:context="http://www.springframework.org/schema/context"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
        
        <!-- IOC容器的配置: 要创建的所有的对象都配置在这里
        <bean id="user" class="cn.itcast.a_hello.User" init-method="init_user" destroy-method="destroy_user" scope="singleton" lazy-init="false"></bean>
         -->
         
        <!--<bean id="user1" class="hello.spring.User"></bean> -->
    </beans>      
    

    第三步: 在applicationContext.xml文件中配置

    <bean id="user1" class="hello.spring.User"></bean>
    

    生成的Bean对象如下:

    public class User {
    
        public User() { }
    
        public String name;
    
        public int id;
    
        public User(String name, int id) {
            super();
            this.name = name;
            this.id = id;
        }
    
        @Override
        public String toString() {
            return "User [name=" + name + ", age=" + id + "]";
        }
    
    }
    

    第四步: 通过IOC容器创建对象

        ApplicationContext ac = new ClassPathXmlApplicationContext("hello/spring/applicationContext.xml");
        User user = (User) ac.getBean("user");
        System.out.println(user);
    

    Spring标签详解

    Bean标签

    对象的创建需要在applicationContext.xml配置文件中通过Bean标签进行声明,最简单的声明就是:

    <bean id="user1" class="hello.spring.User" scope = "singleton"></bean>
    

    声明过后,使用ApplicationContext(后文统称为ac)类,创建配置文件中声明过的类

        // 得到IOC容器对象
        ApplicationContext ac = new ClassPathXmlApplicationContext("cn/itcast/a_hello/applicationContext.xml");
        // 从容器中获取bean
        User user = (User) ac.getBean("user");
        System.out.println(user);
    

    scope 属性

    通过IOC容器创建的对象默认都是单例模式,我们可以通过在applicationContext.xml文件中位置bean的" scope "属性来修改对象的创建模式

    <bean id="user1" class="hello.spring.User" scope = "singleton"></bean>
    

    bean标签中的 " scope " 属性可以控制对象创建的类型 一一 即 单例模式 / 多例模式

     scope = "singleton"      // 默认值  :  单例模式
     scope = "prototype"     // 多例模式
     scope="prototype"  在用到对象的时候,才创建对象
     scope="singleton"  在启动(容器初始化之前), 就已经创建了bean,且整个应用只有一个。
    

    lazy-init 属性
    懒加载属性

    lazy-init="false"  默认为false,  不延迟创建,即在启动时候就创建对象
    lazy-init="true"   延迟初始化, 在用到对象的时候才创建对象
    (只对单例有效)
    

    init-method \ destroy-method 属性

    创建对象之后,初始化/销毁

    init-method="init_user"       【对应对象的init_user方法,在对象创建爱之后执行 】
    destroy-method="destroy_user"  【在调用容器对象的destriy方法时候执行,(容器用实现类)】
    

    IOC容器创建对象

    无参构造创建对象

    <bean id="user" class="hello.spring.User"></bean>
    

    带参数构造方法创建对象

    <bean id="user" class="hello.spring.User">
        <constructor-arg value="zhangsan" index="0" type="java.lang.String"></constructor-arg>
        <constructor-arg value="1" index="1" type="int"></constructor-arg>
    </bean>
    

    value : 用于给构造方法中参数赋值,
    index : 构造方法中参数的索引(位置)
    type : 构造方法中参数对应的类型. 基本类型不变,引用类型要填写全名
    ref : 引用类型,可以引用IOC容器中其他对象的值,作为该对象的值.具体使用方法如下

    <bean id="str" class="java.lang.String">
        <constructor-arg value="lisi"></constructor-arg>
    </bean>
    
    <bean id="user" class="hello.spring.User">
        <constructor-arg ref="str" index="0" type="java.lang.String"></constructor-arg>
        <constructor-arg value="2" index="1" type="int"></constructor-arg>
    </bean>
    

    user对象的有参构造方法中的第一个参数,引用了id = "str"的bean对象的值,

    工场方式创建对象

    我们先创建一个工厂类 :

    public class ObjectFactory {
    
        public User getInstance() {
    
            return new User("通过非静态方法创建User对象", 1);
        }
    
        public static User getInstance4Static() {
            return new User("通过静态方法创建User对象", 2);
        }
    }
    

    使用工厂类的非静态方法创建对象 :

    <!-- 1. 首先创建工场类 -->
    <bean id="factory" class="hello.spring.ObjectFactory"></bean>
    <!-- 2. 通过工厂类创建User对象 -->
    <bean id="user3" factory-bean="factory" factory-method="getInstance"></bean>
    

    使用工厂类的静态方法创建对象 :

    <!-- 
        class 指定的就是工厂类型
        factory-method  一定是工厂里面的“静态方法”
     -->
    <bean id="user" class="hello.spring.ObjectFactory" factory-method="getInstance4Static"></bean>
    

    name属性 & id属性

    <!-- 
    问题:spring配置文件中,bean节点的id与name属性的区别?
        id 不能有特殊符号, 且唯一,且不能以数字开始
        name 可以有特殊符号
     -->
    <bean id="test" name="1test"  class="cn.itcast.b_create_obj.User"></bean>

    相关文章

      网友评论

        本文标题:Spring学习 一 配置文件、基础

        本文链接:https://www.haomeiwen.com/subject/lepuqftx.html