文章目录
- 一、Spring简介
- 1、特点
- 2、Spring框架的组成结构
- 二、Spring IOC
- 1、IOC概述
- 2、Spring IOC的底层实现原理
- 三、入门案例
- 1、Spring开发包下载
- 2、传统方法与控制反转的对比
一、Spring简介
Spring是一个开源框架,是Java SE/EE 的一站式框架,由Rod Johnson开发,2004年发布了Spring框架的第一版。
1、特点
- 方便解耦、简化开发
Spring就是一个大工厂,可以将所有对象的创建和依赖关系的维护交给Spring进行管理。 - AOP变成支持
Spring提供了面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等事务。 - 声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。 - 方便程序测试
Spring提供了Junit4支持,可以通过注解方便的测试Spring程序 - 方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis等)的直接支持 - 降低Java EE API的使用难度
Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
2、Spring框架的组成结构
二、Spring IOC
1、IOC概述
IOC(Inversion of Control):即控制反转,不是技术,而是一种设计思想。它意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
- 谁控制谁,控制什么
传统Java SE程序设计,我们直接在对象内部通过new进行创建对象,是程序主动去创建依赖对象;而IOC是有专门一个容器来创建这些对象,即由IOC容器来控制对象的创建;谁控制谁?当然是IOC 容器控制了对象;控制什么?那就是主要控制了外部资源获取(不只是对象包括比如文件等)。 - 为何是反转,哪些方面反转了
有反转就有正转,传统应用程序是由我们自己在对象中主动控制去直接获取依赖对象,也就是正转;而反转则是由容器来帮忙创建及注入依赖对象;由容器帮我们查找及注入依赖对象,对象只是被动的接受依赖对象,所以是反转;哪些方面反转了?依赖对象的获取被反转了。 - 传统主动注入
- IOC依赖注入(DI)
依赖注入的目的是在代码之外管理程序间组件的依赖关系.
2、Spring IOC的底层实现原理
- 用到的技术
- xml配置文件
- dom4解析配置xml文件
- 工厂设计模式
- 反射
- 实现步骤
- 创建xml配置文件,配置要创建的类的对象类
- 创建工厂类
- 使用dom4j解析配置文件
- 使用反射创建对象
三、入门案例
1、Spring开发包下载
下载地址: https://repo.spring.io/libs-release-local/org/springframework/spring/
- 目录结构
选择 xxx.RELEASE-dist.zip 版本,下载后解压可以看到如下目录结构:
![4](H:\Java攻城狮\笔记整理\4-1-1 Spring IOC\images\spring目录结构.PNG) - Spring核心开发包
- spring-beans-4.0.0.RELEASE.jar
- spring-context-4.0.0.RELEASE-jar
- spring-core-4.0.0.RELEASE,jar
- spring-expression-4.0.0.RELEASE.jar
- commons-logging-1.1.3.jar(日志)
2、传统方法与控制反转的对比
- 接口方法
public interface UserService {
public void sayHello();
}
- 实现类
public class UserServiceImpl implements UserService {
// 添加属性
private String name;
@Override
public void sayHello() {System.out.println("Hello Spring" + name);}
public String getName() {return name;}
public void setName(String name) {this.name = name;}
}
- Spring配置文件:applicationContext.xml
<?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">
<!-- UserService的创建权交给了Spring -->
<bean id="userService" class="com.moc.ioc.demo1.UserServiceImpl">
<!-- 设置属性(依赖注入DI) -->
<property name="name" value="小明"></property>
</bean>
</beans>
- 传统开发方法与控制反转
public class SpringDemo1 {
// 传统开发方法
@Test
public void demo1() {
// 接口实现类
//UserService userService = new UserServiceImpl();
// 需要设置属性时不能使用接口实现类
UserServiceImpl userService = new UserServiceImpl();
// 设置属性
userService.setName("小明");
userService.sayHello();
}
// Spring 实现方式
@Test
public void demo2() {
// 创建Spring工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
// 通过工厂获得类
UserService userService = (UserService) applicationContext.getBean("userService");
userService.sayHello();
}
}