本文将介绍两个内容:
1、spring4概述
2、第一个sping测试
1、spring4概述
1.1 什么是spring
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring
○ 目的:解决企业应用开发的复杂性
○ 功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能
○ 范围:任何Java应用
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架。
所以Sping是SE/EE开发的一站式框架
一站式框架:有EE开发的每一层解决方案
WEB层 :SpingMVC
Service层:Sping的Bean管理,Sping声明事务
DAO层 :Sping的jdbc模板,Sping的ORM模块
优点
1)JAVA EE应该更加容易使用。
2)面向对象的设计比任何实现技术(比如JAVA EE)都重要。
3)面向接口编程,而不是针对类编程。Spring将使用接口的复杂度降低到零。(面向接口编程有哪些复杂度?)
4)代码应该易于测试。Spring框架会帮助你,使代码的测试更加简单。
5)JavaBean提供了应用程序配置的最好方法。
6)在Java中,已检查异常(Checkedexception)被过度使用。框架不应该迫使你捕获不能恢复的异常。
1.2 什么是IoC
控制反转
(Inversion ofControl,缩写为IoC),是面向对象编程中的一种设计原则,可以用来减低计算机代码之间的耦合度。其中最常见的方式叫做依赖注入(Dependency Injection,简称DI),还有一种方式叫“依赖查找”(Dependency Lookup)。通过控制反转,对象在被创建的时候,由一个调控系统内所有对象的外界实体将其所依赖的对象的引用传递给它。也可以说,依赖被注入到对象中。
1.3 IoC和DC
IOC: 控制反转,将对象的创建权反转给了Spring。
DI: 依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
面向对象的时候
依赖
Class A{
}
Class B{
public void xxx(A a){
}
}
继承:is a
Class A{
}
Class B extends A{
}
聚合:has a
2、第一个spring测试类
2.1 下载Sping的开发包
官网下载方式
方式一:jingyan.baidu.com/article/455…
or
方式二:www.lagou.com/lgeduarticl…
2.2 开发包目录结构
-
docs :Sping的开发规范和API
libs :Sping的开发的jar和源码
schema:Sping配置文件的约束
2.3 创建Web项目
2.3.1 新建项目
New--Dynmic Web Project--name--sping4_day01
2.3.2 引入jar包
1) 引入核心容器包
由Sping的开发规范..\spring-framework-4.2.4.RELEASE-dist\docs\spring-framework-reference\pdf\spring-framework-reference.pdf中[2.Introduction to Sping Framework\2.2Modules]可知核心容器包含四部分,只需引入Bean、Core、Context、SpEL这四部分的jar包,如图Sping的体系结构
spring-beans-4.2.4.RELEASE.jar
spring-context-4.2.4.RELEASE.jar
spring-core-4.2.4.RELEASE.jar
spring-expression-4.2.4.RELEASE.jar
2) 引入日志包
日志包位于spring-framework-3.0.2.RELEASE-dependencies\org.apache.commons\com.springsource.org.apache.commons.logging\1.1.1\com.springsource.org.apache.commons.logging-1.1.1.jar
3) 引入log4j包
位于spring-framework-3.0.2.RELEASE-dependencies\org.apache.log4j\com.springsource.org.apache.log4j\1.2.15\com.springsource.org.apache.log4j-1.2.15.jar
4) 引包完成
2.3.3 传统方式调用DAO中的方法
创建接口和类
创建package--name--com.it.spring.demo1
创建interface--name--UserDAO
创建class--name--UserDAOImpl
新建测试类--name--SpringDemo1
接口中定义一个save方法,实现类中实现这个方法
UserDAO
package com.it.spring.demo1;
//用户管理Dao层的接口
public interface UserDAO {
public void save();
}
UserDAOImpl
package com.it.spring.demo1;
//用户管理Dao层的实现类
public class UserDAOImpl implements UserDAO{
@Override
public void save() {
System.out.println("UserDao执行了。。");
}
}
SpringDemo1
package com.it.spring.demo1;
import org.junit.Test;
public class SpringDemo1 {
@Test
//传统方式调用Dao中的方法
public void demo1() {
UserDAO uD = new UserDAOImpl();
uD.save();
}
}
问:如果底层实现改了,需要修改源代码,能否不修改源代码对程序进行扩展?
答:可以通过Spring的IoC的底层实现,具体如下图
新建applicationContext.xml
引入约束,位于spring-framework-4.2.4.RELEASE-dist\docs\spring-framework-reference\html\xsd-configuration.html中最下面的
添加配置
<bean id="userDao" class="com.it.spring.demo1.UserDAOImpl"></bean>
2.3.5 编写测试类
@Test
public void demo2() {
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean中的参数与xml中的id保持一致
UserDAO UD = (UserDAO)applicationContext.getBean("userDao");
UD.save();
}
复制一个log4j.properties,运行测试