Spring Demo

Spring Demo

1. 导入jar

1.1 四个核心的Spring的jar:

  • spring-beans.jar

  • spring-core.jar

  • spring-context.jar

  • spring-expression.jar

位于Spring核心文件的夹/libs目录下

1.2 日志jar,是spring四个核心jar需要使用的:

  • commons.logging.jar

位于Spring依赖库中

1.3 其他jar:

  • log4j,

  • junit.jar(单元测试)

2. 定义Java类和接口

3. 定义Spring的容器配置文件,在文件中注册Java对象

由spring容器管理的java对象叫做:javabean,或者bean

4. 定义测试类

创建spring的容器对象,

容器接口:ApplicationContext

实现类:

  1. ClassPathXmlApplicationContext

  2. FileSystemXmlApplicationContext

###

1
2
3
public interface SomeService {
public void doSome();
}
1
2
3
4
5
6
7
8
9
10
11
public class SomeServiceImpl implements SomeService {
public SomeServiceImpl() {
super();
System.out.println("SomeServiceImpl类的无参构造方法");
}

@Override
public void doSome() {
System.out.println("执行业务方法doSome()");
}
}

applicationContext.xml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?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">

<!-- 注册bean对象
id: 指定bean对象的名称,是唯一值
class: 指定类的全限定名称,不能是接口

相当于java代码:SomeService someService=new com.node.service.SomeSeriveImpl();
-->
<bean id="someService" class="com.node.service.SomeServiceImpl" />

<!-- bean标签的name属性也可以表示bean对象 -->
<bean name="someA,someB" class="com.node.service.SomeServiceImpl" />
</beans>

配置文件的路径:

  1. ClassPathXmlApplicationContext

类路径下: src目录下,String resource=”applicationContext.xml”;

  1. FileSystemXmlApplicationContext

磁盘目录: String resource=”E:/Eclipse/project/17_spring4_01_primary/applicationContext.xml”;

项目的根目录下,与src和libs目录是同级的: String resource = “applicationContext.xml”;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;

public class MyTest {

public static void main(String[] args) {
// 定义Spring容器配置文件的位置
String resource="applicationContext.xml";
// 创建容器对象,使用ClassPathXmlApplicationContext,要求配置文件放在类路径下
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
// 从容器中获取对象,使用的对象名称(配置文件中bean的id)
SomeService service =(SomeService) ac.getBean("someService");
// 调用对象的业务方法
service.doSome();
}

/*
* 使用FileSystemXmlApplicationContext作为容器的实现类
* Spring容器配置文件放在磁盘目录下
* */
@Test
public void test01() {
// 指定容器配置文件的位置
String resource="E:/Eclipse/project/17_spring4_01_primary/applicationContext.xml";
// 创建容器
ApplicationContext ac=new FileSystemXmlApplicationContext(resource);
// 从容器获取对象
SomeService service=(SomeService) ac.getBean("someService");

service.doSome();
}

/*
* 使用FileSystemXmlApplicationContext作为容器的实现类
* Spring容器配置文件放在项目的根目录下,与src和libs目录是同级的
* */
@Test
public void test02() {
String resource = "applicationContext.xml";
ApplicationContext ac=new FileSystemXmlApplicationContext(resource);
SomeService service=(SomeService) ac.getBean("someService");

service.doSome();
}

/*
* 使用BeanFactory作为容器
* */
@Test
public void test03() {
String resource="applicationContext.xml";
BeanFactory factory= new XmlBeanFactory(new ClassPathResource(resource));
SomeService service=(SomeService) factory.getBean("someService");
service.doSome();
}

/*
* ApplicationContext作为容器创建对象的时机:
* 在创建容器对象的时候,就创建了配置文件中的bean对象
* 一般采用Test04()的方法
* 优点:获取对象的速度快
* 缺点:占用内存
* */
@Test
public void test04() {
String resource="applicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
SomeService service =(SomeService) ac.getBean("someService");
service.doSome();
}

/*
* 使用BeanFactory作为容器作为容器创建对象的时机:
* 在调用getBean的时候才创建对象
* 优点:不占内存
* 缺点:获取对象慢
* */
@Test
public void test05() {
String resource="applicationContext.xml";
BeanFactory factory= new XmlBeanFactory(new ClassPathResource(resource));
SomeService service=(SomeService) factory.getBean("someService");
service.doSome();
}

/*
* 使用<bean name="bean的名称"/>
* */
@Test
public void test06() {
String resource="applicationContext.xml";
ApplicationContext ac=new ClassPathXmlApplicationContext(resource);
SomeService service =(SomeService) ac.getBean("someB");
service.doSome();
}
}