贯穿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属性:

 

 

运行整个工程,完成。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值