第五章 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核心概念的主要内容,如果未能解决你的问题,请参考以下文章

Java核心第五章继承

第五章 接口

python核心编程第五章练习-5.17-随机序列

Java多线程编程核心技术,第五章

逆向工程核心原理——第五章

数据库系统概念笔记——第五章:高级SQL