没有合适的资源?快使用搜索试试~ 我知道了~
Java ee 企业应用开发:第7章 在Spring中管理事务.ppt
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 156 浏览量
2022-07-13
22:41:33
上传
评论
收藏 494KB PPT 举报
温馨提示
试读
32页
Java ee 企业应用开发:第7章 在Spring中管理事务.ppt
资源推荐
资源详情
资源评论
第7章 在SPRING中管理事务
7.1 知识点:AOP简介
7.2 开发步骤
7.1 知识点:AOP简介
7.1.1 从代理机制初探AOP
从一个简单常见的例子开始。这个例子当中含有日志动作,程序中经常需要为某些
动作或事件作下记录,以便随时检查程序运行过程和排除错误的信息。来看一个简单的
例子,当需要在执行某些方法时留下日志信息,直觉的,可能会这样写。
import java.util.logging.*;
public class HelloSpeaker{
pirvate Logger logger=Logger.getLogger(this.getClass().getName());
public void hello(String name){
logger.log(Level.INFO,”hello method starts…”); //方法执行开始时留下日志
Sytem.out.println(”hello, ”+name); //程序的主要功能
Logger.log(Level.INFO, ”hello method ends…”); //方法执行完毕时留下日志
}
}
7.1.1 从代理机制初探AOP
在HelloSpeaker类中,当执行hello()方法时,程序员希望开始执行该方法与执行完毕
时都会留下日志,最简单的做法是用上面的程序设计,在方法执行的前后加上日志动作。
然而对于HelloSpeaker来说,日志的这种动作并不属于HelloSpeaker逻辑,这使得
HelloSpeaker增加了额外的职责。
如果程序中这种日志动作到处都有需求,以上的写法势必造成程序员必须到处撰写
这些日志动作的代码。这将使得维护日志代码的困难加大。如果需要的服务不只是日志动
作,有一些非类本身职责的相关动作也混入到类中,比如权限检查,事务管理等等,会使
得类的负担加重,甚至混淆类本身的职责。
另一方面,使用以上的写法,如果有一天不再需要日志(或权限检查,交易管理等
)的服务,将需要修改所有留下日志动作的程序,无法简单地就将这些相关服务从现有的
程序中移除。
可以使用代理(Proxy)机制来解决这个问题,有两种代理方式:静态代理(static
proxy)和动态代理(dynamic proxy)。
在静态代理的实现中,代理类与被代理的类必须实现同一个接口,在代理类中可以
实现记录等相关服务,并在需要的时候再呼叫被代理类。这样被代理类中就可以仅仅保留
业务相关的职责了。
7.1.1 从代理机制初探AOP
举个简单的例子,首先定义一个IHello接口:
IHello.java代码如下:
public interface Ihello{
public void hello(String name);
}
然后让实现业务逻辑的HelloSpeaker类别实现Ihello接口,HelloSpeaker.java代码
如下:
public class HelloSpeaker implements Ihello{
public void hello(String name){
Sytem.out.println(”hello,”+name);
}
}
可以看到,在HelloSpeaker类中没有任何日志的代码插入其中,日志服务的实现
将被放到代理类中,代理类同样要实现IHello接口:
7.1.1 从代理机制初探AOP
HelloProxy.java代码如下:
public class HelloProxy implements Ihello{
private Logger logger=Logger.getLogger(this.getClass().getName());
private Ihello helloObject;
public HelloProxy(Ihello helloObject){
this.helloObject=helloObject;
}
public void hello(String name){
log(”hello method starts…”); //日志服务
helloObject.hello(name); //执行业务逻辑
log(”hello method ends…”); //日志服务
private void log(String ms){
logger.log(Level.INFO,msg);
}
}
剩余31页未读,继续阅读
资源评论
wxg520cxl
- 粉丝: 23
- 资源: 3万+
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功