ssh我爱编程

Spring学习 一 配置文件、基础

2018-04-10  本文已影响31人  Mon7ey

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>
上一篇下一篇

猜你喜欢

热点阅读