Spring框架知识点总结

简述:Spring 框架(简称Spring)是 SpringSource 出品的一个用于简化 Java企业级应用开发开源的应用程序框架。它提供了开发一个结构良好的、可维护和易于测试的应用所需的基础设施,当使用Spring框架时,开发者只需要专注于编写应用的业务逻辑。从而提供开发者的生产效益。你可以使用Spring框架开发独立的Java应用程序、Web应用程序、Applet 或任何其他类型的Java应用程序。
Spring 框架是一个分层架构,由 7 个定义良好的模块组成。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,如图 1 所示。
图 1. Spring 框架的 7 个模块:
在这里插入图片描述

Spring 框架的核心:提供了依赖注入(Dependency Injection,DI)机制的控制反转(Inversion of Control,IoC)容器。

Spring 框架的目标:使现有技术更加易用,推进代码最佳实践。它可以帮我们优化好多东西,它是一个全面的解决方案,不仅仅专注于某一层,而是贯穿表现层、业务层、持久层,可以说是“一站式”选择。作为轻量级的框架,它大大简化了Java企业级开发,提供了强大、稳定的功能。它也是一个三层架构,提供了一个集成框架,在Web层有Spring MVC,在业务层有Spring Core,在持久层有Spring ORM。Spring框架的核心就是IoC(控制反转)和AOP(面向切面编程)。

Spring框架主要有三大优点:
(1) 容器。Spring框架是一个容器,能够管理项目中的所有对象。
(2) IOC(控制反转)。Spring将创建对象的方式反转了,从程序员自己创建反转给了程序。
(3) AOP(面向切面)。面向切面编程,简而言之,就是将纵向重复的代码横向抽取出来。Spring框架应用了面向切面的思想,主要体现在为容器中管理的对象生成动态代理对象。

典型应用场景:解耦,简化开发对程序进行监控、拦截等;组合其他框架,百搭。
一.IoC
所谓IoC就是inverse of control 控制反转,将对象的创建权(实例化) 交予spring框架创建过程。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
举例,我们在学习三层的时候都知道Service层的类要调用Dao的方法,必须在Service类中添加对Dao的引用,才能调用Dao的方法, Service层和Dao的依赖比较严重,使用工厂也有相应的弊端 ,基于此,我们选择了Spring IoC,Spring IoC通过配置文件配置:在配置文件中配置实体的Id和对应的实现类,然后通过API读取:示例如下:
在这里插入图片描述

这样写的优点在于,不需要代码书写工厂类了,只是一个简单的XML配置文件,就搞定了,因此,将新类注册到整个程序时,也就不需要源码、编译之类的,如果没有特殊情况,只要编译实现类就行了。

二.AOP
AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。指扩展功能的同时不修改源代码,将功能代码聪业务逻辑中分离出来。
主要功能:日志记录、性能统计、事务处理、安全控制、异常处理等。
主要意图:将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

AOP的相关术语如下:

1.Target:目标对象,被代理对象。例如:UserService
2.JoinPoint 连接点,目标对象中被代理的方法(掉)。例如:saveUser()/updateUser/deleteUser/findUser
3.PointCut 切入点,实际上被代理的方法,及实际上的连接点。例如:saveUser
   切入点是连接点子集
4.Advice 

通知/增强,在切入点前或后执行的方法。例如:before、after
分类:前置通知、后置通知,环绕通知等,通知是对方法进行增强。
5.Introduction,引介,特殊的通知。对类直接增强。给类添加方法,修改不要方法等。
6.Weaving ,织入:将通知 引用 到 目标对象上 过程。及将通知与切入点关联过程。
7.Proxy,代理,目标对象Target生成代理对象,于是就可以代码增强了。

下面用一张图来表示他们的关系:
在这里插入图片描述
说了那么多,接下来就来做一个简单的增强处理aop示例
所需jar:aop.zip 密码:2t03
spring配置文件:springConfig.xml:
在这里插入图片描述
实体类: Targetj.java
在这里插入图片描述

工具类:AdviceTarget.java
在这里插入图片描述
junit测试:
在这里插入图片描述
测试结果:
在这里插入图片描述
三.Spring——IoC和Aop使用拓展
<一> 多种方式实现依赖注入

  1. 构造注入
  2. 设值注入
  3. p命名空间注入
    1、构造注入:通过构造函数注入数据。
    构造注入的优劣势:构造注入的时效性好,在对象实例化时就得到所依赖的对象,便于在对象的初始化时就得到所依赖的对象,便于在对象的初始化方法中使用依赖对象;但受限于方法重载的形式,使用灵活性不足。
    在这里插入图片描述
    2、设值注入:通过setter访问器注入数据。
    设值注入的优劣势:设值注入使用灵活,但时效性不足,并且大量的setter访问器增加了类的复杂性。
    在这里插入图片描述
    3、p命名空间注入:Spring配置文件从2.0版本开始采用schema形式,使用不同的命名空间管理不同类型的配置,使得配置文件更具拓展性并且简化配置的工作量。
    注意:使用p命名空间必须导入 xmlns:p=“http://www.springframework.org/schema/p

在这里插入图片描述
Spring并不倾向于某种注入方式,用户应该根据实际情况进行合理的选择。

<二> 处理不同类型的数据:
特殊字符串处理
JavaBean
List
Array
Set
Map
Properties
空字符串
null值
实体类:TestEntity.java
在这里插入图片描述
spring配置文件:springConfig.xml
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
junit测试:
在这里插入图片描述
执行结果:
在这里插入图片描述

<三 >使用注解实现IoC的配置
1、使用注解实现Bean组件的定义:
@Component:该注解与等效。
@Respository:该注解用于标注Dao类。
@Service:该注解用于标注业务逻辑类。
@Controller:该注解用于标注控制器类。
2、使用注解实现Bean组件的装配:
@Autowired:该注解用于注入所依赖的对象。
@Autowired 采用按类型匹配的方式为属性自动装配合适的依赖对象,即容器会查找和属性类型相匹配的Bean组件,并自动为属性注入。
@Qualifier:该注解用于指定所需Bean的名字。

3、加载注解定义的Bean:
首先在spring配置文件中添加对context命名空间的声明,然后使用context命名空间下的component-scan标签扫描注解标注的类,base-package 属性指定了需要扫描的基准包(多个包逗号隔开)。

  1. <context:component-scan base-package=“dao,service,entity”/>

使用注解实现一个简单的IoC的配置
spring配置文件:springConfig.xml
在这里插入图片描述
业务逻辑层:userServiceImpl.java
在这里插入图片描述
junit测试:
在这里插入图片描述
执行结果:
在这里插入图片描述
<四 >使用注解定义切面
AspectJ是一个面向切面的框架,它拓展了Java语言,定义了AOP语法,能够在编译期间提供代码的织入,所以它有一个专门的编译器用来生产遵守字节编码规范的Class文件。
Spring通过集成AspectJ实现以注解的方式定义切面,大大减少了配置文件的工作量。此外因为Java的反射机制无法获取方法参数名,Spring还需要利用轻量级的字节码处理框架 asm(已集成在Spring Core 模块中)处理@AspectJ中所描述的方法参数名。

使用注解实现一个简单的AOP切面:
spring配置文件:springConfig.xml
在这里插入图片描述
业务逻辑类:Target.java
在这里插入图片描述
辅助增强类:AdviceTarget.java
在这里插入图片描述
junit测试:
在这里插入图片描述
执行结果:
在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值