Spring简洁版总结

一:为什么使用spring?

spring泉眼,最好的水,在企业开发中,是业务层最好的框架

spring优点是什么?

1.低侵入,低耦合

2.方便集成其他框架

3.降低javaee开发难度

4.spring包含javaee三层每一层的解决方案(一站式)

二:Spring三大功能?

IOC DI AOP

IoC? inverse of control:控制反转?简单的说,就是把对象的实例化工作交给容器来完成;

传统的应用,a依赖b耦合度高,而spring呢,耦合度低,体现在哪呢?对象交给容器实例化,我们用

的时候去容器拿就好,实现真正的接口编程

通过Spring的IoC功能,我们在容器中得到了一个一个独立的bean.

三:spring使用步骤?

1,导入jar包依赖包

2,设置xml配置文件 其作用:告诉spring帮我管理哪些bean,里面有id和class两个要写

3.使用容器

3.1创建资源文件对象

3.2创建beanFactory对象,并传入上面的资源文件对象,注意:该对象的基于xml配置文件的

3.3通过getbean拿对象(按照名字和类型去拿)

四:spring加载过程

1,首先找到配置文件并加载

2,解析bean元素,识别id和class属性

3,通过反射建立一个class.forname.newInstance对象实例

4,把id作为key,把实例作为value存到容器中

5,通过getbean拿到对象实例

总结:

spring本质把原本写在java里的东西搬到xml配置文件里了,配置文件里配置的不是类型是,bean实例

一些细节:

我们通常吧配置文件分散到各个模块中,在总的模块中通过import引入,使得结构更清晰明了,有利于维护

和代码的悦读与阅读.

bean, id属性要求是唯一的,name不是,可以是多个名字,作用基本相同

五:测试相关的问题

传统的测试:缺点在于手动开启和关闭容器,每运行一个测试用例都要重启一次spring容器,我们的

spring容器是运行在JUnit测试里的

spring推荐使用spring的测试

其使用步骤为:

1.导入jar包

2.在测试类上加@runWith标签和ContextConfiguration标签

3.添加一个BeanFactory字段,并在他上面加一个@Autowired标签

4,在测试中,可以直接通过这个BeanFactory字段拿我们需要的bean

六:关于容器:

BeanFactory是spring中提供的最简单的,最基本的容器,器提供了IOC/DI功能,其重要方法getbean

我们一般使用ApplicationContext,其提供的功能更加强大全面,ApplicationContext接口继承了

BeanFactory接口,提供了AOP功能

注:BeanFactory是延迟实例化,用的时候才实例化,ApplicationContext在容器启动是时候就已经实

例化了,可通过lazy-init设置延迟实例化.对于web应用来说,一般选择迫切实例化,且我们把比较耗时的事情

放在系统启动的时候完成;

Scope关键字

用来设置单例的,默认就是单例的,一般在持久化和业务层对象选择单例,在struts2请求不能为单例

七:DI

dependence inject(依赖注入) 把对象的依赖关系全部交给spring容器来处理;

分为构造器注入和setter注入和自动注入也叫注解

构造器注入:能保证所有的都正确注入,依赖对象多,会造成参数过多

setter优点:依赖多,代码不好维护,可能会产生忘记配置的问题可通过@Required注解来避免

DI注解的使用:

1,使用DI注解,在spring的配置文件里面还是需要配置bean本身;

2,@Autowired

1,autowired标签可以把需要的对象自动的注入到目标对象中;

2,autowired标签可以放在字段上,也可以放在setter方法上面;

autowired的执行流程:

1,加载和解析XML文件;

2,实例化所有的bean,并且方到spring的容器当中;

3,解析对象的类型,如果对象类型的某些字段或者setter方法上面有@Autowired标签,

1,在容器中找到对应的对象;

2,把找到的对象设置到字段或者setter方法中;

怎么找对象?

1,首先按照类型找;

2,如果没有找到;系统报错(默认情况下,autowired标签有一个@Required标签的作用)

3,如果找到多个,按照字段或者属性的名字,再用名字+类型去找;

4,如果1,3都没有找到,报错;

注:

1,可以通过设置autowired的required=false让这个属性(字段)可以没有值;

2,可以通过在字段或者setter方法上添加@Qualifier来规定我要注入的bean的名字;

3,可以在Spring的主要对象上面添加@Autowired,让spring自动注入;

4,所以,我们的spring的测试类,可以直接引用需要测试的目标对象就可以了;

@Resource

也可以通过resource标签来自动注入;

选择:

1,Resource是JavaEE的规范,但是缺少spring对autowired标签的一些加强;

2,一般我们选择使用@Autowired标签;

总结:spring的IoC/DI能为我们的应用做什么?

1,使用传统的方式,会产生:

1,应用使用了接口,但是并没有做到真正的解耦;

2,应用中的DAO和service并没有做单例(性能较差);

2,使用spring,

1,应用中真正的就按照接口在编程了;

2,spring就像一个粘合剂,在XML文件中自动的帮我们初始化了所有的对象,并设置好所有对象之间的依赖关系;

3,除了配置文件,根本感觉不到spring的存在;

时间: 2024-10-08 21:41:35

Spring简洁版总结的相关文章

瀑布流代码,简洁版 带分页

接上一篇   瀑布流代码,简洁版 的功能之上添加分页的功能 Index.cshtml @using PagedList.Mvc @model PagedList.StaticPagedList<int> @{ ViewBag.Title = "瀑布流"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section header{ <script src="~/Scripts/jquery-ui

【C++】实现一个简洁版的class String

//实现一个简洁版的class String #include <iostream> #include <string.h> using namespace std; class String { public: String() { _str = new char[1]; _str[0] = '\0'; } String(const char *str) { _str = new char[strlen(str) + 1]; strcpy(_str, str); } String

1——自我实现一个简洁版的String类

在C++中有C没有的string字符串类型,string类型的数据其实是一个指向字符串首地址的指针变量,因此在string类的默认成员函数拷贝构造和赋值运算符的重载就会涉及到深浅拷贝的问题,一不小心要么就是内存泄露要么就是多次释放同一块空间导致程序崩溃,下面就来模拟实现一个简洁版的String类: 既然是指向一个字符串的指针,因此类的成员变量就需要有一个char*类型的指针: #include <iostream> #include <string.h> using namespa

Classic Minesweeper Simple 经典扫雷游戏简洁版

老游戏新尝试,复刻经典扫雷游戏,简洁版,设计时尽可能减少文字信息,模仿iOS的特点,上手即用.提供最基本的设置和统计信息,毕竟大家是为了玩儿游戏,不是做大数据分析不是吗?试试吧,欢迎讨论分享. 操作: 长按标旗 点按翻开 扫动滚屏 捏合缩放 This is a classic minesweeper, the famous logic game. If you want to win, find and flag all the mines hidden in blocks. Have a tr

001. MyBatis+SpringMVC+Spring[重置版]

说在前面的话 三阶段的课程知识点和细节很多,请假应该杜绝! 课后需抓紧时间复习,提高代码质量和速度! 课程周期和学习课程顺序为:[正常情况下] MyBatis 持久层框架 [2周] SpringMVC Web层框架 [2周] Spring 容器框架 [2周] 三阶段课件的共享地址为: 三阶段课件网盘地址 访问密码 1ed2 软件下载地址为:[学会自己下载] MySQL 数据库 STS下载地址 开发工具[跟Eclipse一样] 数据管理工具破解版 访问密码 5666 Tomcat7.0.69 下载

Spring各版本源码下载

spring framework 各版本源码下载地址 现在spring的源码下载地址真是不好找,这次终于找到了.记录一下,以帮助需要的朋友. https://github.com/spring-projects/spring-framework/tags可以选择需要的版本进行下载. 感谢网友 xiyuan1999 在csdn上提供的此下载地址.

struts2+hibernate+spring注解版框架搭建以及简单测试(方便脑补)

为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->Maven Project--->Next(之后界面如下所示:) --->Next(点击next之后出现如下界面:选择最后一个 maven-archetype-webapp,然后点击next) --->Next(点击next之后出现如下界面,然后选择好组织号,工程号,版本号即可),最后点击Fi

struts2+hibernate+spring配置版框架搭建以及简单测试(方便脑补)

为了之后学习的日子里加深对框架的理解和使用,这里将搭建步奏简单写一下,目的主要是方便以后自己回来脑补: 1:File--->New--->Other--->Maven--->Maven Project--->Next(之后界面如下所示:) --->Next(点击next之后出现如下界面:选择最后一个 maven-archetype-webapp,然后点击next) --->Next(点击next之后出现如下界面,然后选择好组织号,工程号,版本号即可),最后点击Fi

带无缝滚动的轮播图(含JS运动框架)-简洁版

昨天写的神逻辑,今天终于解决,经过大家的商讨,终于研究出来一套简单的代码!!! js代码如下: 1 <script> 2 window.onload = function() { 3 var oWrap = document.getElementById("wrap"); 4 var oBox = document.getElementById("box"); 5 var aBox = oBox.getElementsByTagName("li