spring AOP的样例代码

来源:互联网 发布:u盘恢复数据免费软件 编辑:程序博客网 时间:2024/06/04 23:22
    /**spring 介绍     * @author chengj     * @date : 20142014-2-19 下午07:58:51     * Spring 框架的两个核心特性    依赖注入(Dependency Injection  DI) 和 面向切面工程  AOP (Aspect-Oriented Programming )     */


定义一个接口

package SpringTest;public interface Ihello {public void hello(String name);}

package SpringTest;/** * @author chengj * @date : 20142014-2-19 下午08:03:14 * 正常的业务 */public class HelloSpeak implements Ihello {public void hello(String name) {System.out.println(name+"hello");}}
package SpringTest;import java.util.logging.Level;import java.util.logging.Logger;import org.junit.Test;/** * @author chengj * @date : 20142014-2-18 下午08:27:54 * 静态代理 * 代理类 的一个接口 只能 服务一种类型的类。而且需要代理的方法有很多。势必要为每个方法进行代理,静态代理在程序鬼魔稍大时 * 必定是无法胜任的在 *在 JDK1.3 之后假如了可协助开发的动态代理公呢个的API等相关类别的,不需要为特定类和方法编写特定的带泪,使用动态代理, *可以是的一个处理者(Handler)为各个类服务 */public class HelloProxy implements Ihello {private Ihello helloObject;private Logger logger = Logger.getLogger(this.getClass().getName());public HelloProxy(Ihello helloObject) {//定义了接口this.helloObject = helloObject;}public void hello(String name) {log("hello method start "); //日志服务helloObject.hello(name);//执行业务逻辑log("hello method end ");//日期服务}private void log(String msg){logger.log(Level.INFO,msg);}}


测试

/** * @author chengj * @date : 20142014-2-18 下午08:35:03 * AOP 中的aspect 所指的可以是像日志等动作和服务  ,将这些动作(cross-cutting concern) * 设计为通用,不介入特定业务类的一个职责清楚的Aspect 类 。这就是所谓的Aspect-Oriented Programming AOP  */package SpringTest;import  org.springframework.aop.support.NameMatchMethodPointcutAdvisor;public class Test {           @org.junit.Testpublic void testHello(){Ihello proxy = new HelloProxy(new HelloSpeak()); //用它来实现proxy.hello("chengj");}}







0 0
原创粉丝点击