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>