其实spring中的aop就是设计模式中的结构型模式中的代理模式还有反射,但是经过spring整合,发扬光大之后代理显得不是那么明显了,代码如下:
业务接口:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public interface IHello {
void syshello(String s);//模拟业务处理
}
实现类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class Helloimlp implements IHello{
@Override
public void syshello(String s) {
System.out.println("Hello " + s); //模拟业务处理
}
}
现在我们要为这个业务方法加上日志记录的业务,我们在不改变原代码的情况下,
我们会去怎么做呢?也许,你会去写一个类去实现IHello接口,并依赖Hello这个类.代码如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class helloproxy implements IHello {
private IHello hello;
public helloproxy(IHello hello) {
this.hello = hello;
}
public void syshello(String s) {
System.out.println("处理业务之前的代码... ...比如验证身份");
this.hello.syshello(s);
System.out.println("处理业务之后的代码... ...比如资源释放");
}
}
测试:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class test {
public static void main(String[] argv) {
IHello hello = new helloproxy(new Helloimlp());
hello.syshello("sadasd");
}
}
业务接口:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public interface IHello {
void syshello(String s);//模拟业务处理
}
实现类:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class Helloimlp implements IHello{
@Override
public void syshello(String s) {
System.out.println("Hello " + s); //模拟业务处理
}
}
现在我们要为这个业务方法加上日志记录的业务,我们在不改变原代码的情况下,
我们会去怎么做呢?也许,你会去写一个类去实现IHello接口,并依赖Hello这个类.代码如下:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class helloproxy implements IHello {
private IHello hello;
public helloproxy(IHello hello) {
this.hello = hello;
}
public void syshello(String s) {
System.out.println("处理业务之前的代码... ...比如验证身份");
this.hello.syshello(s);
System.out.println("处理业务之后的代码... ...比如资源释放");
}
}
测试:
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package cn.com.fyz.spring.aop;
/**
*
* @author RDGFT
*/
public class test {
public static void main(String[] argv) {
IHello hello = new helloproxy(new Helloimlp());
hello.syshello("sadasd");
}
}