Spring 框架概述
1.1. 什么是Spring
Spring是分层的JavaSE/EE full-stack(一站式) 轻量级开源框架
分层: 来自JavaEE体系结构 (客户端层、 web层、业务层、持久层 )
服务器端三层结构 (web层、业务层、持久层)
Servlet + JSP —- web层技术 —- Struts2框架
JDBC 接口 —- 持久化技术 —- Hibernate框架
EJB 框架(复杂) —- 业务层技术 —- Spring 框架 (取代EJB出现 )
Spring 出现,就是为了解决常见JavaEE 企业开发问题 !
一站式: Spring框架提供了 web层(表现层) SpringMVC、 业务层 IoC、AOP和事务管理、 持久层JdbcTemplate 各层javaEE软件开发解决方案
轻量级:相对于EJB框架而言
Spring核心
IoC: 控制反转
AOP: 面向切面编程
Spring 给软件开发带来了什么
方便解耦,简化开发 (Spring IoC特性)
AOP编程的支持
声明式事务的支持
方便程序的测试
方便集成各种优秀框架 (整合Struts2 、 Hibernate 、MyBatis 、Struts1 )
降低JavaEE API的使用难度 (Spring 提供大量工具类, 简化代码编写 )
Spring 体系结构
理解IoC和DI的概念
什么是IoC ? 什么是DI ? 区别是什么?
IoC: 控制反转, 解决程序对象紧密耦合问题(工厂+反射+ 配置文件), 将程序中原来构造对象的权限,交给IoC容器来构造,当程序需要对象,找IoC容器获取。
DI : 依赖注入 , IoC容器需要为程序提供依赖对象,返回对象所依赖对象一同可以提供(Servlet需要Service, 找Ioc容器获取Service, Service由容器提供,Service依赖DAO ,IoC容器提供Service对象同时, 将Service依赖DAO 注入到Service中)
编写IoC和DI入门案例
第一步创建 spring-config.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">
<beans>
<bean id="demo" class="com.bdqn.cn.Demo">
<property name="id" value="1"/>
<property name="name" value="zhangsan"/>
</bean>
</beans>
</beans>
第二步创建实体类Demo
package com.bdqn.cn;
/**
* Created by 18054 on 2018/9/22.
*/
public class Demo {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
第三部测试类
import com.bdqn.cn.Demo;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Created by 18054 on 2018/9/22.
*/
public class Junit {
@Test
public void test(){
ApplicationContext context=new ClassPathXmlApplicationContext("spring_config.xml");
Demo obj =(Demo) context.getBean("demo");
System.out.println(obj.getId());
System.out.println(obj.getName());
}
}
运行结果