一. Spring 概念

Spring,是一个开放源代码的设计层面框架,他解决的是业务逻辑层和其他各层的松耦合问题,因此它将面向接口的编程思想贯穿整个系统应用。Spring是一个分层的一站式框架,所谓一站式就是指spring网站框架很全面,且整合度高,有了Spring框架即便在不使用其他框架的时候,也可以独立地完成项目。Spring之所以一站式,是因为Spring框架的性质是属于一个容器,容器中装什么对象就能拥有什么功能。Spring不局限于某一层,Spring是对象的容器,帮我们“管理”项目中的所有对象。

二. Spring 框架的搭建

2.1 导包

 

2.2 编写相关的类

2.3 创建相关配置文件并完成类对象的配置
创建相关配置文件。建议在src 文件夹下新建文件,并取名为:application.xml 。

1)先引入约束,操作步骤有点复杂,具体如下:

2)完成配置

2.4 测试

编写测试程序,代码如下:

三. Spring框架的核心模块

Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。如果再在它们中选出核心的话,那就非Beans组件莫属了,为何这样说,其实Spring就是面向Bean的编程(BOP,Bean Oriented Programming),Bean在Spring中才是真正的主角。

每个模块的功能如下:
1)核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
2)Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
3)Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
4)Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
5)Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
6)Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
7)Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
Spring 框架的功能可以用在任何 J2EE 服务器中,大多数功能也适用于不受管理的环境。Spring 的核心要点是:支持不绑定到特定 J2EE 服务的可重用业务和数据访问对象。毫无疑问,这样的对象可以在不同 J2EE 环境 (Web 或 EJB)、独立应用程序、测试环境之间重用。

四. Spring框架的原理

内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用Java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。  
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的。  
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置,内部通过反射去动态的组装对象)  
要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能。  
Spring里用的最经典的一个设计模式就是:模板方法模式。 Spring里的配置是很多的,很难都记住,但是Spring里的精华也无非就是以上的两点,把以上两点跟理解了 也就基本上掌握了Spring.

4.1  IoC(Inversion of control): 控制反转  

1)IoC:  
概念:控制权由对象本身转向容器,将对象的创建权利交给了Spring框架。由容器根据配置文件去创建实例并创建各个实例之间的依赖关系  

核心:bean工厂;在Spring中,bean工厂创建的各个实例称作bean  

IOC:控制反转,将对象的创建权力交给了Spring框架

DI:依赖注入,需要有IOC的环境,Spring创建这个类的过程中,Spring将类的依赖的属性设置进去。

4.2 AOP(Aspect-Oriented Programming): 面向切面编程  

代理的两种方式:  
静态代理:  
针对每个具体类分别编写代理类, 针对一个接口编写一个代理类。  
动态代理:  

针对一个方面编写一个InvocationHandler,然后借用JDK反射包中的Proxy类为各种接口动态生成相应的代理类。

动态代理 不用写代理类,虚拟机根据真实对象实现的接口产生一个类,通过类实例化一个动态代理,在实例化动态代理时将真实对象及装备注入到动态代理中,向客户端公开的是动态代理,当客户端调用动态代理方法时,动态代理根据类的反射得到真实对象的Method,调用装备的invoke()方法,将动态代理、 Method、方法参数传与装备的invoke()方法,invoke()方法在唤起method()方法前或后做一些处理。     

其中,产生动态代理的类:java.lang.refect.Proxy。装备必须实现InvocationHandler接口实现invoke()方法。

Spring 中的 AOP思想:

在介绍Spring中的 AOP 之前,先学习下啊STS 插件、Spring与junit整合。

AOP:Aspect Oriented Programming的缩写,面向切面编程。通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。

AOP的相关名词:

  

 Spring中AOP的开发案例

Spring Aop ,它封装了实现动态代理的代码,不需要程序员手动编写动态代理代码。当然,在Spring Aop中除了封装了动态代理之外,还封装了cglib 代理。正是因为Spring Aop封装了动态代理(基于接口)和cglib 代理(不基于接口),所以它能对任何类进行代理增强。

1) 导包

4+2+2+2,前面4+2为四个基本包和日志包,中间的2 为spring的aop包(spring-aop和spring-aspects),最后的2为spring需要的第三方aop包(com.springsource.org.aopalliance和com.springsource.org.aspectj.weaver)。

 2) 准备目标对象

3) 准备通知

4) 配置,并将通知织入目标对象

新建一个application.xml配置文件,要记得先完成aop相关的约束。

 5) 测试

编写测试类,代码如下:

 

过程分析,如图所示:

以上步骤1~5,是基于xml配置的形式,Spring Aop还可以使用注解的方式。注解的方式,其中大部分的步骤是一样的,只是在.xml 文件中的配置减少,然后再在通知类中以注解的方式进行相关配置。

如果觉得在目标类中每个方法都要使用相同的语句去关联目标类比较繁琐,也可以如下所示:

五. Spring中的容器(工厂)

5.1 BeanFactory 接口(已过时

BeanFactory 是Spring的原始接口,针对原始接口的实现类功能比较单一,。BeanFactory接口实现类的容器,特点是每次在获得对象的时候才会创建对象。在资源匮乏的环境中可以使用BeanFactory 接口。

6.2 ApplicationContext

每次容器启动的时候,就会创建容器中所配置的所有对象。ApplicationContext所提供的功能更多,在web开发中更多地使用ApplicationContext。

 

六. Spring 的配置详解

  

             模块化配置,在配置文件中引入其它的配置文件:

     

七. Spring生成Bean的 3 种方式

Spring中生成Bean。一般有无参构造方法方式、静态工厂方式、实例工厂方式 3 种方式在Spring中生成Bean。

八. Spring 中的属性注入

8.1 基本的注入方式

8.1.1 set()方法注入属性

先创建一个Car类,然后将此Car类作为Uer类的一个属性。在类中为各个属性添加set() 方法。

在配置文件中,Spring使用set()方法的方式,注入属性

 

8.1.2 构造方法注入属性

先创建一个Car类,然后将此Car类作为Uer类的一个属性。注意,要在User类中书写一个构造方法

在配置文件中,Spring使用构造方法的方式,注入属性

8.1.3 p名称空间注入属性

 

8.1.4 SpEL 注入属性

 

    

8.2 复杂类型的注入

先创建一个类,其中包含4个不同类型的属性。

再在配置文件中,进行注入:

九. 使用注解配置Spring 

在配置Spring的时候,除了在 applicationContext.xml 文件中配置的方法之外,还可以使用注解的方式对Spring进行配置 。

9.1 用注解配置Spring 的案例

使用注解的方式管理Spirng中的bean ,先给出一个简单案例

9.2 Spring 配置中常见的注解

 十. Spring 整合JDBC

Spring中提供了一个可以操作数据库的对象JDBCTemplate(JDBC模板对象),这个对象封装了JDBC技术。JDBCTemplate与DBUtils中的QueryRunner非常相似。

10.1 常规方法连接数据库

1)导包

4+2+spring-test+spring-aop+junit4类库+c2p0连接池+JDBC驱动+spring-jdbc+spring-tx事务。

2)准备数据库

先熟悉下常规的操作数据库的步骤。第一步,先创建一个t_user 表

第二步,演示JDBC模板,对数据库进行相关操作。

运行结果,如图所示:

10.2 使用Spring容器管理JDBCTemplate对象

使用Spring容器,来管理JDBCTemplate对象。需要熟悉Spring Aop中的常见API。

1)先创建一个User类,添加相关属性,并生成对应的get() 、set()方法

再新建接口,添加方法名

3)接下来,创建以上接口的实现类,使用JDBC模板来实现接口中的方法。下面的代码几乎给出了日常开发中所能应用到的常见增、删、改、查方法。

  

4)需要把上面的DAO配置到Spring容器中,将DAO交给Spring容器来管理。需要在applicationContext.xml中进行配置。

 5)测试

10.3 扩展

10.3.1  JDBC模板的实现,也可以继承 JdbcDaoSupport 类,根据连接池创建JDBC模板。

10.3.2  在企业开发中,经常将于数据库连接的相关操作单独放在properties文件中进行。

先自己新建一个db.properties文件,然后再将db.properties文件中的信息配置到applicationContext.xml文件中。

十一. Spring 中AOP事务

11.1 事务的相关概念

 

11.2 Spring进行事务管理的API

Spring封装事务操作,Spring 封装了事务管理代码,具体地是封装了打开事务、提交事务、回滚事务的代码。在 Spring中事务操作对象,因为在不同平台操作事务,事务的代码各不相同。Spring提供了一个接口,PlatformTransactionManager接口PlatformTransactionManager接口是Spring事务中最为核心的对象。在Spring中针对不同的平台,提供了不同的实现类,如: JDBCTransactionManager、DataSourceTransactionManager、HibernateTransactionManager。

 11.3 Spring进行事务管理的案例

先假设一个业务环境,比如完成一个转账的功能,需要进行事务的管理。使用Spring 事务管理的方式来完成这个功能。转账方法需要调用到两个DAO操作,一个给出钱,一个得到钱。

11.3.1 先引入案例

 1)导包

新建一个JavaWeb项目,然后,复杂一下 11.1中所用到的包,将这些包导入到新创建的WEB项目中。

2)先书写Dao层相关的代码

创建Dao接口,声明加钱、减钱两个方法

在数据库中创建表 t_account

 

在AccountDaoImpl 中实现上文书写的接口,对数据库中数据进行CRUD操作,以实现Dao中声明过的方法。

  

3)接着,书写Service 层相关的代码

先书写接口

实想上文的接口,书写方法语句

4)在applicationContext.xml中,进行配置

 

5)测试

以上情况是没有进行事务管理的,如果有异常等情况发生,则转账业务会出现错误。

 

11.3.2 方式一, Spring管理事务之 编码式(不建议使用)

不管用哪种方式管理事务,都需要将核心的事务管理器配置到Spring容器。

 1)导包 、2)先书写Dao层相关的代码,同上 

3)接着,书写Service 层相关的代码

先书写接口

实想上文的接口,书写方法语句

  

4)在applicationContext.xml中,进行配置

在上例配置文件中再添加相应的配置代码

  

5)测试

11.3.3 方式二, Spring管理事务之 aop xml配置 (重点)

 

 1)导包 

新建一个JavaWeb项目,然后,复制一下 11.1中所用到的包,将这些包导入到新创建的WEB项目的WEB-INF的lib下。4+2包,aop+aspect包,aop联盟+weaving织入 包。

 2)在配置文件中,进行配置

先添加新的约束

3)测试

测试的结果和方式一是一样的

11.3.4 方式三, Spring管理事务之 aop 注解 (重点)

1)导包 ,添加新的约束和方式二是一样的

2)在applicationContext.xml配置文件中,开启注解管理事务

3)使用注解

上面给出的是在方法上面加入注解,也可以在类上加入注解。

4)测试

测试的结果和方式一、方式二,是一样的。

十二. SSH三大框架的整合

https://blog.csdn.net/huangyuhuangyu/article/details/68067047

https://blog.csdn.net/jstxzhangrui/article/details/52825873

http://blog.sina.com.cn/s/blog_4873f8e00101ilgi.html【详细】

https://blog.csdn.net/qq_23994787/article/details/73612206【详细,手把手特别好!!!】

十三. 快速入手完整的Web项目

快速看懂一个JavaWeb项目的基本步骤:
1.)从代码结构入手,搞清楚Java源码所在目录以及jsp代码所在目录。
2.)从Web.xml入手,搞清楚首页,上下文及配置情况。
3.)从lib目录里初步查看系统使用的框架和工具包。
4.)从页面大体浏览,看页面的scriptlet使用的主要语言。
5.)从代码包结构初步知晓代码的层次。
6.)从配置文件入手,弄清楚页面到Action/Servlet的配置关系。
7.)搞清楚代码提交的方式,前台请求如何传递到后台,又是如何返回到前台页面的,这里以Login页面为最佳切入点。
8.)从处理Login的Action/Servlet中观察,看在session中记录了多少重要的数据,后面程序又是怎样用到这些数据的。
9.)如果存在树形菜单,要搞清楚树形菜单的形成及传递请求的方式。
10.)归纳几种典型页面,搞清楚其处理和响应形式。
11.)归纳通用的页面组件如分页,上传下载,异步请求等原系统是如何处理的。
12.)搞清楚后台数据来源及配置,主要是数据库及通过WebService方式。
13.)归纳后台处理的主要业务。
14.)可能的话,把后台数据表的ER图画出来。
15.)典型业务的流程图可以绘制出来。

---------------------------------------------------------------------- 我是低调的分隔线  --------------------------------------------------------------------------

                                                                                                                                     吾欲之南海,一瓶一钵足矣...
 

                         

易百教程:https://www.yiibai.com/spring/spring-tutorial-for-beginners.html 链接

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐