Spring概念
1. Spring是开源的轻量级框架;
2. Spring核心:IOC(控制反转)、AOP(面向切面编程);
3. Spring是一站式框架:Spring在javaee三层结构中,每层都提供不同的解决技术:
- web层:springMVC
- service层:IOC
- dao层:JDBCTemplate
Spring的IOC操作
1. 对象创建交给Spring进行管理;
2. IOC操作的两种方式:配置文件、注解。
IOC底层原理
原文链接:Spring IOC的原理及详解。
1. IOC的提出是为了解决对象之间耦合度过高的问题,IOC作为“第三方”实现具有依赖关系的对象之间的解耦;
2. 控制反转:对象A获得依赖对象B的过程,由主动行为变为了被动行为,控制权颠倒过来了;
3. 依赖注入:IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。控制被反转之后,获得依赖对象的过程由自身管理变为了由IOC容器主动注入;
4. IOC中最基本的技术就是“反射(Reflection)”编程;
5. 我们可以把IOC容器的工作模式看做是工厂模式的升华,可以把IOC容器看作是一个工厂,这个工厂里要生产的对象都在配置文件中给出定义,然后利用编程语言的的反射编程,根据配置文件中给出的类名生成相应的对象。从实现来看,IOC是把以前在工厂方法里写死的对象生成代码,改变为由配置文件来定义,也就是把工厂和对象生成这两者独立分隔开来,目的就是提高灵活性和可维护性。
IOC底层使用的技术
1. xml配置文件
2. dom4j解析xml
3. 工厂设计模式
4. 反射
IOC入门案例
1. 导入jar包
做Spring最基本功能的时候,需要导入四个核心的jar包以及支持日志输出的jar包。
2. 创建类及其成员函数
1 public class User {
2
3 public void fun() {
4 System.out.println("Just a function.");
5 }
6
7 public static void main(String[] args) {
8 // 原始做法
9 User user = new User();
10 user.fun();
11 }
12 }
3. 创建Spring配置文件
(1)Spring核心配置文件名称和位置不是固定的,最好放在src里面,官方推荐名称为applicationContext.xml(可自行修改);
(2)引入schema约束。Spring在启动的时候需要验证xml文档,约束的作用就是来验证配置文件(xml文档)的语法正确性。XML文档的schema约束定义了文档的结构,内容和语法,元素和属性等。
<?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"> </beans>
(3)配置对象创建
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xsi:schemaLocation=" 5 http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> 6 <!-- ioc example --> 7 <bean id="user" class="cn.itcast.ioc.User"></bean> 8 </beans>
(4)编写测试代码
1 package cn.itcast.ioc;
2
3 import org.junit.Test;
4 import org.springframework.context.ApplicationContext;
5 import org.springframework.context.support.ClassPathXmlApplicationContext;
6
7 public class TestIOC {
8
9 @Test
10 public void testUser() {
11 //1 加载spring配置文件,根据配置文件创建对象
12 ApplicationContext context =
13 new ClassPathXmlApplicationContext("bean.xml");
14 //2 得到配置创建的对象
15 User user = (User) context.getBean("user");
16 System.out.println(user);
17 user.fun();
18 }
19 }