Spring的配置,XML提示的配置,Bean的相关配置
一、XML提示的配置
1、Schema 的配置
一个XML只能被一个dtd约束,但是可以被多个 Schema 约束
二、Bean的相关配置
1、< bean > 标签的id 和 name 的配置
id:使用了约束的唯一约束。
不能出现一些特殊字符。
name:没有使用约束的唯一约束(理论上是可以重复的,但是实际开发当中是不能出现重复)。
里面可以出现特殊字符。
Spring和Struts1框架整合的时候
< bean id ="/user" class=" " / >
Struts1现在很少用所以name和id可以理解为一样的
class:要生成类的全路径
2、< bean > 标签生命周期的配置
init-method :自动执行的初始化方法,Bean被初始化的时候执行的方法
destroy-method:销毁的方法,Bean被销毁的时候执行的方法(Bean必须是单例创建的,工厂关闭)
<?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">
<!-- Spring的Bean生命周期的配置 init-method设置该类初始化方法 setup会自动执行 destroy-method 设置要销毁的方法 -->
<bean id="customerDAO" class="com.itzheng.spring.demo2.CustomerDAOImpl" init-method="setup" destroy-method="destroy">
</bean>
</beans>
package com.itzheng.spring.demo2;
public interface CustomerDAO {
public void save();
}
package com.itzheng.spring.demo2;
public class CustomerDAOImpl implements CustomerDAO {
public void setup() {
System.out.println("CustomerDAOImpl被初始化了、、、、、");
}
@Override
public void save() {
// TODO Auto-generated method stub
System.out.println("CustomerDAOImpl的save方法执行了。。。。");
}
public void destroy() {
System.out.println("CustomerDAOImpl被销毁了、、、、、");
}
}
测试:
package com.itzheng.spring.demo2;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class SpringDemo2 {
@Test
/*
* 生命周期的配置
*/
public void demo1() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
CustomerDAO customerDAO = (CustomerDAO) applicationContext.getBean("customerDAO");
//customerDAOImpl 当中的SetUp会自动执行
customerDAO.save();
applicationContext.close();
}
}
结果
3、Bean的作用范围的配置(重点)
(1)scope:Bean的作用范围
scope的五个取值:
singleton:默认值,Spring会采用单例模式创建该对象。
prototype:多例模式。(在Struts2和Spring整合的时候一定会用到)。
request:应用在web项目中,Spring创建这个类以后,将这个类传入到request域当中。
session:应用在web项目中,Spring创建这个类以后,将这个类传入到session域当中。
globalsession:应用在web项目中,必须在prolet环境下使用。(在一个地方存入数据以后在子系统当中也拥有该数据)。
如果没有这种环境,配置globalsession就相当于session。
(2)默认值,Spring会采用单例模式创建该对象。证明测试
创建两个工厂(测试是否是同一个对象)。
@Test
/*
* Bean的作用
*/
public void demo2() {
ClassPathXmlApplicationContext applicationContext = new ClassPathXmlApplicationContext(
"applicationContext.xml");
CustomerDAO customerDAO1 = (CustomerDAO) applicationContext.getBean("customerDAO");
CustomerDAO customerDAO2 = (CustomerDAO) applicationContext.getBean("customerDAO");
System.out.println(customerDAO1 == customerDAO2);
applicationContext.close();
}
被初始化一次,true证明是同一个对象
将bean当中的scope=“singleton”
效果一样说明默认值就是scope=“singleton”
(3)多例模式。
false证明初始化两次,创建两个对象,因为工厂当中有两个对象
所以不知道该关闭那个对象,所以没有销毁。
本文地址:https://blog.csdn.net/qq_44757034/article/details/107077319
推荐阅读