贯穿spring的核心理念

本文主要包含spring框架的整个理念。

1.IoC(反转控制)和依赖注入

2.面向方面编程

1.IoC(反转控制)和依赖注入

参考这篇文章:http://www.bccn.net/Article/kfyy/java/jszl/200610/4512.html

使用IoC,对象是被动的接受依赖类,而不是自己主动的去找。容器在实例化的时候主动将它的依赖类注入给它。可以这样理解:控制反转将类的主动权转移到接口上,依赖注入通过xml配置文件在类实例化时将其依赖类注入。

2.面向方面编程

2.1 eclipse中面向方面编程开发环境。

2.2 面向方面编程简介

2.3 一个简单的AOP demo

2.1 eclipse中面向方面编程开发环境

windows -> install new softwares -> add a new website ->输入下面的update site :http://download.eclipse.org/tools/ajdt/36/update -> 选择所有的选项。如图:

点击finish,安装完成之后,重启eclipse,然后新建一个java工程,应该出现下面的效果:

2.2 面向方面简介

在面向对象的编程中,主要是能够解决的是一个对相集合之间的关系,通过继承的策略实现代码的重复使用。但是也存在oo无法解决的问题,当要为没有类层次的对象引入公共行为的话,oo的思想是无法解决的,所以引入了面向方面编程。

面向方面关键概念:

join point:程序执行过程中某一点,advice就是相对于这个join point而言的。

advice : advice是join point的执行代码,都是方面的“执行的逻辑”。

pointcut:一组join point的总称,用于指示某个建议应用于何处。

introduction:为现有的java类添加字段或者是方法。

before advice :在调用join point之前调用before advice。

after advice:和before advice相反。

2.3简单的aop编程实例

2.3.1使用j2se的动态代理实现aop

客户端代码:

BusinessLogicCoreConcern.java

IBusinessLogic.java

LoggingProxyAspect.java

SecurityProxyAspect.java :

上面的代码使用的是java中的InvocationHandler实现的。简单的讲: Proxy类的设计用到代理模式的设计思想,Proxy类对象实现了代理目标的所有接口,并代替目标对象进行实际的操作。但这种替代不是一种简单的替代, 这样没有任何意义,代理的目的是在目标对象方法的基础上作增强,这种增强的本质通常就是对目标对象的方法进行拦截。所以,Proxy应该包括一个方法拦截 器,来指示当拦截到方法调用时作何种处理。InvocationHandler就是拦截器的接口。(http://blog.csdn.net/pizishuai2008/archive/2009/07/28/4385906.aspx)。

也就是当接口的实现类或者是接口调用接口中的函数的时候,java会自动调用invoke(InvocationHandler接口中的一个待实现的函数)函数。默认的情况下,调用接口中的任何一个函数,都会触发invoke函数被调用,但是可以在函数invoke中通过method的名称来做限制,就像上面的做法:

下面是一个简单的使用InvocationHandler实现的例子:

IAnimal.java :

Dog.java :

客户端程序:

2.3.2使用aspectj来实现上面的demo如下:

客户端程序:

SecurityAspect.java :  新增加一个aspect

代码如下:

TranscationAspect.java :

给整个工程添加aspectj属性:

运行整个工程,完成。

posted @   qiang.xu  阅读(648)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示