springframework(六)AOP之静态代理
来源:互联网 发布:梦幻邮箱数据 编辑:程序博客网 时间:2024/05/20 20:55
spring的AOP是基于代理的。java的事务控制是基于代理的。这两句话熟悉吧,一些老鸟就喜欢用这些词汇让我们犯晕,让我们感到他们很专业。这里我们将打破这个神话,本篇先介绍基于代理的AOP。这里我们先展示下什么叫做代理,先从静态代理开始。3、调用的静态代理类
一个静态代理的例子。
1、定义一个接口
[java] view plain copy
- package com.itcast.aop;
- //要实现的接口
- public interface IHello {
- public void hello(String name) throws Exception;
- public void helloAaa(String name);
- public void helloBbb(String name);
- }
2、一个实现接口的实例
[c-sharp] view plain copy
- package com.itcast.aop;
- //实现方法1
- public class HelloSpeaker implements IHello{
- // private Logger logger = Logger.getLogger(this.getClass().getName());
- public void hello(String name) throws Exception{
- System.out.println("Hello "+ name);
- }
- public void helloAaa(String name) {
- System.out.println("Hello in aaa "+ name);
- }
- public void helloBbb(String name) {
- System.out.println("Hello in bbb "+ name);
- }
- }
[java] view plain copy
- package com.itcast.aop;
- import java.util.Date;
- import java.util.logging.Logger;
- //静态代理类
- public class HelloProxy implements IHello {
- private Logger logger = Logger.getLogger(this.getClass().getName());
- private IHello helloObj;
- public HelloProxy(IHello helloObj){
- this.helloObj=helloObj;
- }
- public void hello(String name) {
- logger.info("method start at "+new Date());
- try {
- helloObj.hello(name);
- } catch (Exception e) {
- e.printStackTrace();
- }
- logger.info("method end at "+new Date());
- }
- public void helloAaa(String name) {
- System.out.println("Hello in aaa"+ name);
- }
- public void helloBbb(String name) {
- System.out.println("Hello in bbb"+ name);
- }
- //静态代理类的测试方法
- public static void main(String[] args){
- IHello proxy = new HelloProxy(new HelloSpeaker());
- try {
- proxy.hello("tester");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
上边就是我们的静态代理类,代理了我们IHello接口的实现类,并加上了自己的日志输出,在IHello的实现类的hello方法每次被调用的时候,都会被在其前后加上日志。
结果如下:
信息: method start at Sun Mar 15 10:57:31 CST 2009
2009-3-15 10:57:32 com.itcast.aop.HelloProxy hello
信息: method end at Sun Mar 15 10:57:32 CST 2009
以上就是静态代理,原理很简单,目的也很简单,就是调用接口实现类的某个方法之前或者之后调用另外的操作。
总结下开发步骤:
1、创建一个接口
2、创建一个接口的实现类
3、创建一个代理类,这个代理类也实现了上边的接口,但是将 要被代理的实现类传入到代理类中,在代理类的接口实现方法中调用,并在调用前后加上一些操作(上边的就是日志操作而已)
0 0
- springframework(六)AOP之静态代理
- springframework(六)AOP之静态代理
- springframework(十一)AOP之自动代理
- springframework(十一)AOP之自动代理
- AOP入门之静态代理
- java学习之路----静态代理---动态代理-----AOP的前奏(AOP也是动态代理)
- AOP之静态代理VS动态代理
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Java之代理(jdk静态代理,jdk动态代理,cglib动态代理,aop,aspectj)
- Spring(AOP静态代理)
- Spring AOP 学习之静态代理
- spring-aop入门之静态代理模式
- springframework(十)AOP之Pointcut、Advisor
- springframework(十)AOP之Pointcut、Advisor
- 022_Hadoop中的数据类型(Writable、WritableComparable、Comparator、RawComparator…)
- 023_数量类型练习——Hadoop MapReduce手机流量统计
- 024_MapReduce中的基类Mapper和基类Reducer
- 025_MapReduce样例Hadoop TopKey算法
- 026_默认的MapReduce Driver(最小驱动问题)
- springframework(六)AOP之静态代理
- 027_编写MapReduce的模板类Mapper、Reducer和Driver
- 028_MapReduce中的计数器Counter的使用
- 虚拟机(VMWare)NAT 模式,配置静态IP上网的问题
- [置顶]01_Hadoop学习笔记内容说明
- 14. Longest Common Prefix
- lightoj-1381 - Scientific Experiment dp
- springframe(七)AOP之动态代理
- HDOJ 2027 统计元音