Spring快速入门笔记——从理论到第一个程序详细总结

一、spring简介

1、什么是spring

概念:Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 loC ( Inverse Of Control:反转控制)和 AOP (Aspect Oriented Programming :面向切面编程)为内核。
提供了展现层SpringMVC和持久层Spring JDBCTemplate 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的JavaEE企业应用开源框架。

IOC:Spring的ioc容器作为spring的核心,IOC容器是一个具有DI(依赖注入:三种方式,接口注入,setter注入,Construct(构造方法)注入)功能的容器,负责实例化、定位、配置应用程序中的对象及建立这些对象间的依赖。通俗而言:就是将对我们对象的管理权交给框架,而不是程序员手动实现对象的实例化,控制反转就是这个。
AOP:面向切面编程,通俗理解就是,将一些与业务逻辑不相关,但是又对于系统结构很重要的一些重复出现的代码片段抽取出来封装为一个切面,注入到各个业务逻辑中去。比如:缓存,事物,日志打印等

2、简单理解:

为解决企业开发复杂性的一种轻量级开源框架。spring的简单分层为
web层,service层,dao层
在这里插入图片描述

3、spring 的优势

1)方便解耦,简化开发
通过Spring 提供的loC容器,可以将对象间的依赖关系交由Spring进行控制,避免硬编码所造成的过度耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2)AOP编程的支持
通过Spring的AOP功能,方便进行面向切面编程,许多不容易用传统ОOP实现的功能可以通过AOP轻松实现。
3)声明式事务的支持
可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务管理,提高开发效率和质量。
4)方便程序的测试
可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可做的事情。
5)方便集成各种优秀框架
Spring对各种优秀框架(Struts、Hibernate、Hessian、Quartz等)的支持。
6)降低JavaEE API的使用难度
Spring对 JavaEE APIl(如JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些API的使用难度大为降低。

4、spring的体系结构

①Core Container(核心容器)

spring的核心容器是其他模块建立的基础,它主要由Beans模块、Core模块、Context-support模块和SpEL(Spring Express Language,Spring表达式语言)模块组成。

Beans模块:
提供BeanFactory,是工厂模块的经典实现,Spring将管理对象称为bean。

Core核心模块
提供Spring框架的基本组成部分,包括loC和DI功能。

Context上下文模块:
建立在Core和Beans模块的基础之上,它是访问定义和配置的任何对象的媒介。其中ApplicationContext接口是上下文模块的焦点。

Context-support模块:
提供了对第三方库嵌入Spring应用的集成支持,比如缓存(EhCache, Guava, JCache)、邮件服务(JavaMail)、任务调度(CommonJ, Quartz)、模板引擎(FreeMarker, JasperReports, Velocity)等。

SpEL模块:
是Spring 3.0后的新增模块,它提供了Spring Expression Language支持,是运行时查询和操作对象的强大的表达式语言。

②Data Access/Integration(数据访问/集成)

数据访问/集成层包括:JDBC、ORM、OXM、JMS、和Transactions模块。
JDBC模块: 提供抽象层,大幅度减少了在开发过程中对数据库操作的编码。
ORM模块: 对流行的对象关系映射API,包括JPA、JDO和Hibernate提供了集成层支持。
OXM模块: 提供了一个支持对象/XML映射的抽象层实现。
JMS模块: 指java消息传递服务。
Transactions事务模块: 支持对实现特殊接口以及所有POJO类的编程和声明事务管理。

③web

Spring的web层包括WebSocket、Servlet、Web和Portlet模块。

④其他模块

Spring的其他模块还有AOP+Aspects(面向切面编程模块)、Instrumentation以及Test模块(spring的单元测试模块)。
请添加图片描述

二、Spring的下载安装

1、下载

下载是在官网下的,太难了,我网站都打不开,下的时候下一个失败一个T^T,建议提前一个晚上下好。。
这里是spring framework的下载地址:
http://repo.spring.io/release/org/springframework/spring
这是gradle的下载地址:
https://gradle.org/next-steps/?version=4.3.1&format=all
阿里云仓库,据说这边下的快,但我不会用。。。
https://maven.aliyun.com/mvn/guide

第三方依赖包:http://commons.apache.org/proper/commons-logging/download_logging.cgi

2、spring目录结构

请添加图片描述
docs文件:spring的API文档和开发规范
libs文件:开发需要的JAR包和源码
schema文件:定义了spring相关配置文件的约束

libs中jar包分为三类
以RELEASE.jar结尾的是:Spring框架class文件的JAR包。
以RELEASE-javadoc.jar结尾的是:Spring框架API文档的压缩包。
以RELEASE-sources.jar结尾的是:Spring框架文件的压缩包。

其中有四个Spring的基础包,分别对应Spring核心容器的四个模块
spring-core-4.3.6.RELEASE.jar:包含Spring框架基本的核心工具类,是其他组件的基本核心。
spring-beans-4.3.6.RELEASE.jar:所有应用都要用到的JAR包。
spring-context-4.3.6.RELEASE.jar:提供了在基础loC功能上的拓展服务等。
spring-expression-4.3.6.RELEASE.jar:定义了Spring的表达式语言。

3、配置(可跳过)

计算机系统属性-高级-环境变量
在这里插入图片描述
系统变量-新建(变量名、变量值如下)
在这里插入图片描述

在这里插入图片描述
最后在cmd上用gradle -v验证一下
在这里插入图片描述

三、spring快速入门

1、eclipse版本

(1)在eclipse中建一个web项目,将图中这几个jar包,复制到lib文件夹中。
请添加图片描述
然后,选中这几个文件,右键bulid path
请添加图片描述
(2)在src目录下,穿件,com.itheima.ioc 包,并在包中创建接口UserDao,在接口中定义一个say方法。

package com.itheima.ioc;

public interface UserDao {
	public void say();

}

创建接口的实现类UserDaoImpl,在接口中实现say方法

package com.itheima.ioc;

public class UserDaoImpl implements UserDao {

	@Override
	public void say() {
		// TODO Auto-generated method stub
		System.out.println("userDao say hello World !");

	}


}

请添加图片描述
(3)在src目录下,创建Spring的配置文件applicationContext.xml,并在配置文件中创建一个iduserDaoBean

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/scheama/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">
	<!-- 将指定类配置给Spring,让Spring创建其对象的实例 -->
	<bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean>>
	
</beans

代码的前4句,可以在spring-5.2.9.RELEASE-dist\spring-framework-5.2.9.RELEASE\docs\spring-framework-reference下,找到index.html 文件。在如图位置
请添加图片描述
这时候可能会发现代码报错:cvc-elt.1: Cannot find the declaration of element 'beans',我查的资料说可能是因为版本问题,可以换成如下代码。

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans><bean id="userDao" class="com.itheima.ioc.UserDaoImpl"></bean></beans> 

(4)在同一个包下,创建测试类TestloC,并在类中,编写main()方法。在main方法中,初始化Spring容器,加载配置文件,然后通过Spring容器获取userDao实例,调用实例中的say方法。

package com.itheima.ioc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestloC {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		
		//1.初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.通过容器获取userDao实例
		UserDao userDao = (UserDao) applicationContext.getBean("userDao");
		
		//3.调用实例中的say()方法
		userDao.say();

	}

}

完成以上步骤,成功出现结果。
请添加图片描述

2、步骤

1,导入框架对应jar包
2,编写接口和实现
3,创建xml配置文件
4,将2中内容配置到配置文件中
5,根据spring客户端传递标识
在这里插入图片描述
在这里插入图片描述

四、依赖注入

1、概念

依赖注入(DI)与控制反转(loC)的含义相同,称呼不同是因为描述同一概念的角度不同。

传统(没有Spring的时候):a对象想要调用b对象,只能自己new一个。此时a、b耦合性增加,不利于项目的后期维护和升级。

现在(使用Spring之后):b对象不再由a自己创建,而是由Spring容器来创建,来控制程序之间的关系。此时控制权由应用代码转移到了Spring身上,这就是控制反转

站在Spring的角度看:自己负责将b对象赋值给a的成员变量,为a注入了它所依赖的实例,所以就是依赖注入

2、实现方式

(1)接口注入:在接口中定义要注入的信息,并通过接口完成注入;
(2)构造注入:使用构造方法注入实例;
(3)set注入:使用set方法注入实例,最常用。

set注入步骤

①在之前那个包中,创建接口UserService,在接口中编写一个say方法。

package com.itheima.ioc;

public interface UserService {

	public void say();
}

②创建接口的实现类UserServiceImpl,在类中声明userDao属性,并添加属性的set方法。

package com.itheima.ioc;

public class UserServiceImpl implements UserService {

	//声明User属性
	private UserDao userDao;
	
	//添加UserDao属性的set方法,用于实现依赖注入
	public void setUserDao(UserDao userDao) {
		this.userDao = userDao;
	}
		
	//实现接口中的方法
	@Override
	public void say() {
		// 调用userDao中的say方法,并执行输出语句
		this.userDao.say();
		System.out.println("hello");

	}


}

③在applicationContext.xml中,创建一个iduserService的Bean,用于实例化UserServiceImpl类的信息,并将userDao的实例注入UserService中。(ref属性用于指定其属性值)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN 2.0//EN" "http://www.springframework.org/dtd/spring-beans-2.0.dtd">
<beans>
	<bean id="userService" class="com.itheima.ioc.UserServiceImpl">
		<property name="userDao" ref="userDao"></property>
	</bean>
</beans> 

④创建测试类TestDI,对程序进行测试。

package com.itheima.ioc;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestDI {

	public static void main(String[] args) {
		// TODO Auto-generated method stub

		//初始化spring容器,加载配置文件
		ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
		
		//2.通过容器获取userService实例
		UserService userService = (UserService) applicationContext.getBean("userService");
		
		//3.调用实例中的say()方法
		userService.say();


	}

}

执行结果
请添加图片描述

框架编写流程

1)导包
2)写配置
3)测试

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂静花开

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值