贯穿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属性:
运行整个工程,完成。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?