第五章 Spring核心概念
Posted 多一处划痕
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五章 Spring核心概念相关的知识,希望对你有一定的参考价值。
欢迎来到本次课堂,今天我们学习的是Spring。
首先,来看一下本章的目标
理解Spring IoC 原理
理解Spring AOP的原理
初始Spring
企业级应用开发
企业级应用是指那些为商业组织,大型企业创建并部署的解决方案及应用。
结构复杂,涉及的外部资源众多,事务密集,数据规模大,用户数量多。
Spring致力于Java EE,Spring贯穿表现层、业务层、持久层。
Spring 的“绿草丛”
Spring是一个轻量级框架,简化了Java企业级开发。
Spring有两个目标:一是让现有技术易于使用,二是促进良好的编程习惯。
Spring IoC
理解“控制反转”
控制反转IoC(Inversion of Control),即控制反转,也称为依赖注入(Dependency Injection,DI)。控制反转是面向对象编程中的一种涉及理念,用来降低程序代码之间的耦合度、依赖,它也是Spring的一个核心概念。
首先理解一下什么是依赖?在程序中,我们所说的依赖一般指通过局部变量、方法参数、返回值等建立的对于其他对象的调用关系。有点绕,通俗地说,在A类中有一个方法,实例化了一个B类的对象,然后调用了B类对象的方法完成一个功能,那么我们就说A类依赖于B类。
如何使用“依赖注入”
当两个组件存在使用关系时,也就是存在依赖关系时。
依赖关系建立可以通过以下几种注入途径:
a、setter方式注入,通过set方法将DAO传入
在Action中定义属性变量和set方法
在定义配置时,指定注入
b、构造方式注入
通过构造器将DAO传入
在Action中定义属性变量和带参数的构造方法
在定义配置时,指定注入
Spring Bean封装机制
Spring以Bean的方式管理所有的组件,Java EE的全部组件都被视为Bean管理
Bean在Spring的容器中运行,Spring负责创建Bean的实例,并管理其生命周期
Spring AOP
理解“面向切面编程”(AOP)
是软件编程思想发展到一定阶段的产物,是对面向对象编程的有益补充。
AOP适用于横切逻辑的场合,如访问控制、事务管理、性能监测。
面向切面编程一下新的基本概念:
切面(Aspect):
连接点(Join Point):
增强处理(Advice):
目标对象(Target object):
AOP代理(AOP proxy):
织入(Weaving):
增强处理类型:
使用Spring AOP实现日志输出
在项目中添加Spring AOP相关的架包。
编写前置增强和后置增强实现日志功能。
编写Spring配置文件,对业务方法进行增强处理。
编写代码,获取带有增强处理的业务对象。
getTarget()方法可以得到被代理的目标对象,getSinature()方法返回被代理的目标,getArgs()方法返回传递给目标方法的参数数组。
<aop:config>
<!--定义一个切入点表达式,并命名为“pointcut”-->
<aop:config>
<!--定义一个切入点表达式,并命名为“pointcut”-->
<aop:pointcut id="pointcut" expression="execution(public void addNewUser(com.entity.User))"/>
<!--引用包含增强方法 Bean-->
<aop:aspect ref="theLogger">
<!-- 引用before()方法定义为前置增强并引用pointcut切入点 -->
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<!--将afterReturning()方法定义为后置增强并引用pointcut切入点 -->
<!-- 通过returning 属性指定为result 的参数注入返回值-->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
</aop:aspect>
</aop:config>
</aop:config>
<aop:config>标签中,配置切入点的标签<aop:pointcut>。<aop:pointcut>的expression属性可以配置切入点表达式。
<aop:pointcut id="pointcut" expression="execution(public void addNewUser(com.entity.User))"/>
常用的模糊匹配:
public * addNewUser(entity.User): "*"表示匹配所有类型的返回值。
public void *(entity.User): "*" 表示匹配所有方法名。
public void addNewUser(...): "." 匹配所有参数个数和类型。
* com.service.*.*(..): 这个表达式匹配com.service包下所有类的所有方法。
* com.service..*.*(..): 这个表达式匹配com.service包及其子包下所有类的所有方法。
<!--引用包含增强方法 Bean-->
<aop:aspect ref="theLogger">
<!-- 引用before()方法定义为前置增强并引用pointcut切入点 -->
<aop:before method="before" pointcut-ref="pointcut"></aop:before>
<!--将afterReturning()方法定义为后置增强并引用pointcut切入点 -->
<!-- 通过returning 属性指定为result 的参数注入返回值-->
<aop:after-returning method="afterReturning" pointcut-ref="pointcut" returning="result"/>
</aop:aspect>
<aop:config>中使用<aop:aspect>引用包含增强方法的Bean。然后通过<aop:before>和<aop:after -returing> 将方法声明为前置增强和后置增强,在<aop:after-running>中可以通过running属性指定需要注入返回值的属性名。
以上是关于第五章 Spring核心概念的主要内容,如果未能解决你的问题,请参考以下文章