Spring中IOC的XML方式的配置

Spring中的基本配置

1、XML文件中标签提示的配置

IDEA中设置中xml catalog直接引入Spring框架解压包下的约束即可。

例如路径:F:\Spring\spring-framework-4.2.4.RELEASE\schema\beans\spring-beans-4.2.xsd


2、bean标签中,id和name的属性配置

id :使用了约束中的唯一约束。里面不能出现特殊字符的。

name :没有使用约束中的唯一约束。里面可以出现特殊字符。

现在一般bean中只需设置id就可以,无需再设置name。

只有在Spring与Struts1的整合中才可能会用到用name来标识bean。

Spring和Struts1框架整合的时候(了解):
<bean name=”/user” class=”xxx.User”/>


3、bean的生命周期的属性配置(了解)

init-method :Bean被初始化的时候执行的方法
destroy-method :Bean被销毁的时候执行的方法(Bean是单例创建时,工厂关闭会执行销毁方法)

需要在bean绑定的类中写对应的init()和destroy()方法。


4、bean的作用范围的属性配置(重点)

scope属性 :bean的作用范围

  • singleton :默认的值,Spring会采用单例模式创建这个对象。
  • prototype :多例模式。(Struts2和Spring整合一定会用到,Action类就是多例的)
  • request :应用在web项目中,Spring创建这个类以后,将这个类存入到request范围中。
  • session :应用在web项目中,Spring创建这个类以后,将这个类存入到session范围中。
  • globalsession :应用在web项目中,必须在porlet环境下使用。但是如果没有这种环境,相对于配置session。

什么是porlet环境?

例如:当你登录了百度账号,你再进入百度旗下的子网页,例如百度网盘,百度地图等,你就不需要再登录了。


5、Spring中bean的实例化几种方式(了解)

无参数构造方法的方式。
静态工厂实例化的方式。
实例工厂实例化的方式。


(1)无参构造方法的方式(默认方式)

编写Bean1类:

package com.pipi.spring.demo2;

// 无参数构造方式
public class Bean1 {
    public Bean1() {
        super();
        System.out.println("Bean1的无参数构造方法执行了!");
    }
}

编写配置:

<!-- 无参数实例化Bean对象 -->
<bean id="bean1" class="com.pipi.spring.demo2.Bean1" />

(2)静态工厂实例化的方式

编写Bean2类:

// 静态工厂方式
public class Bean2 {

}

编写Bean2的静态工厂:

package com.pipi.spring.demo2;

// Bean2的静态工厂
public class Bean2Factory {

    public static Bean2 createBean2() {
        System.out.println("Bean2Factory中的方法执行了!");
        return new Bean2();
    }
}

编写配置:

<!-- 静态工厂方式,实例化Bean对象 -->
<bean id="bean2" class="com.pipi.spring.demo2.Bean2Factory" factory-method="createBean2" />

(3)实例工厂实例化的方式

编写Bean3类:

public class Bean3 {

}

Bean3的实例工厂:

package com.pipi.spring.demo2;

// Bean3的实例工厂
public class Bean3Factory {

    public Bean3 createBean3() {
        System.out.println("Bean3Factory中的方法执行了!");
        return new Bean3();
    }
}

编写配置:

<!-- 实例工厂方式,实例化Bean对象 -->
<bean id="bean3Factory" class="com.pipi.spring.demo2.Bean3Factory" />
<bean id="bean3" factory-bean="bean3Factory" factory-method="createBean3" />

6、Spring的属性注入的几种方式

构造方法的属性注入。
set方法的属性注入。
p名称空间的属性注入。
SpEL表达式的属性注入。
集合类型的属性注入。


(1)构造方法的方式的属性注入

编写类Car:

public class Car {

    private String name;
    private Double price;
    // setter and getter
	// 无参数构造方法,有参数构造方法,重写toString()
}

编写配置:

<!-- 构造方法方式的属性注入 -->
<bean id="car" class="com.pipi.spring.demo3.Car">
    <constructor-arg name="name" value="宝马" />
    <constructor-arg name="price" value="800000.0" />
</bean>

(2)set方法的方式的属性注入

set方法的属性注入:
在Car类中提供属性的set方法即可。

编写配置:

<!-- set()方法的方式的属性注入 -->
<bean id="car" class="com.pipi.spring.demo3.Car">
    <property name="name" value="奔驰" />
    <property name="price" value="1000000.0" />
</bean>

如果属性是对象类型:

编写车拥有者employee类:

public class Employee {

    private String name;
    private Car car;
	// setter and getter
	//无参构造,有参数构造,重写toString()
}

set方法设置对象类型的属性:用ref属性

<bean id="employee" class="com.pipi.spring.demo3.Employee">
	<!-- 普通类型的属性 -->
    <property name="name" value="张三" />
	<!-- 对象类型的属性,name是属性名,ref是引用bean的id -->
    <property name="car" ref="car" />
</bean>

当然构造方法的方式,也可以完成对象类型的属性注入:

<!-- 构造方法方式的属性注入 -->
<bean id="employee" class="com.pipi.spring.demo3.Employee">
    <constructor-arg name="name" value="张三" />
    <constructor-arg name="car" value="car" />
</bean>

(3)p名称空间的属性注入(Spring2.5以后)

通过引入p名称空间完成属性的注入。

写法:
普通属性,p:属性名=”值”
对象属性,p:属性名-ref=”值”

p名称空间怎么引入?
在根标签中将第一个属性值复制黏贴一下,将beans换成p,名称空间加个后缀p,变成xmlns:p。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:p="http://www.springframework.org/schema/p"
       ......

编写配置:

<!-- p名称空间的属性注入 -->
<bean id="car" class="com.pipi.spring.demo3.Car" p:name="小三轮" p:price="2000.0" />
<bean id="employee" class="com.pipi.spring.demo3.Employee" p:name="张三" p:car-ref="car" />

(4)SpEL的属性注入(Spring3.0以后)

SpEL:Spring Expression Language,Spring的表达式语言。
语法:#{SpEL表达式}

普通属性,对象类型的属性都用value,不用ref。

<!-- SpEL表达式方式的属性注入 -->
<bean id="car" class="com.pipi.spring.demo3.Car">
    <property name="name" value="#{'电动车'}" />
    <property name="price" value="3000" />
</bean>

<bean id="employee" class="com.pipi.spring.demo3.Employee">
    <property name="name" value="#{'张三'}" />
    <property name="car" value="#{car}" />
</bean>

(5)集合类型属性注入(了解)

编写Bean类:

public class CollectionBean {

    private String[] array;
    private List<String> list;
    private Set<String> set;
    private Map<String, String> map;
    // setter and getter,构造方法,重写toString()
}

编写配置:

<!-- 集合类型的属性注入 -->
<bean id="collectionBean" class="com.pipi.spring.demo3.CollectionBean">
    <!-- 注入数组属性 -->
    <property name="array">
        <list>
            <value>string1</value>
            <value>string2</value>
        </list>
    </property>

    <!-- 注入List集合属性 -->
    <property name="list">
        <list>
            <value>hello</value>
            <value>world</value>
        </list>
    </property>

    <!-- 注入Set集合属性 -->
    <property name="set">
        <set>
            <value>aaa</value>
            <value>bbb</value>
        </set>
    </property>

    <!-- 注入Map集合属性 -->
    <property name="map">
        <map>
            <entry key="key1" value="value1" />
            <entry key="key2" value="value1" />
        </map>
    </property>
</bean>

7、Spring的分模块开发的配置

(1)在加载配置文件的时候,加载多个(这样做有点麻烦)

ClassPathXmlApplicationContext()构造方法,参数为可变参数。

ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml", "com/pipi/spring/demo3/springDemo3.xml");

(2)在核心配置文件中引入多个配置文件,加载时只需加载核心配置文件

<import resource="com/pipi/spring/demo3/springDemo3.xml" />
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值