Spring, 基于代理的AOP

原创 2015年07月07日 15:32:43

先定义接口

package net.wchdai.spring.dao;

public interface StudentDAO {
    public void saveStudent();
    public void queryStudent();
}

接口的实现类:

package net.wchdai.spring.dao.impl;

import net.wchdai.spring.dao.StudentDAO;


public class StudentDAOImpl implements StudentDAO{

    @Override
    public void saveStudent() {
        System.out.println("StudentDAOImpl save student");
    }

    @Override
    public void queryStudent() {
        System.out.println("StudentDAOImpl query student");
    }

}

代理类:

package net.wchdai.spring.proxy;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;

public class MyStudentProxy implements MethodBeforeAdvice,AfterReturningAdvice  {

    @Override
    public void afterReturning(Object arg0, Method arg1, Object[] arg2,
            Object arg3) throws Throwable {
        System.out.println("afterReturning");
    }

    @Override
    public void before(Method arg0, Object[] arg1, Object arg2)
            throws Throwable {
        System.out.println("before");

    }

}

ApplicationContext.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

<bean id="studentDaoImpl" class="net.wchdai.spring.dao.impl.StudentDAOImpl"/>

<bean id="studentProxy" class="net.wchdai.spring.proxy.MyStudentProxy"/>

<bean id="studentDaoPointCut" class="org.springframework.aop.support.JdkRegexpMethodPointcut">
    <property name="pattern" value=".*Student"></property>
</bean>


<bean id="studentDaoAdvisor" class="org.springframework.aop.support.DefaultPointcutAdvisor">
    <property name="advice" ref="studentProxy"></property>
    <property name="pointcut" ref="studentDaoPointCut"></property>
</bean>

<bean id="studentDaoProxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target" ref="studentDaoImpl"></property>
    <property name="interceptorNames" value="studentDaoAdvisor"></property>
    <property name="proxyInterfaces" value="net.wchdai.spring.dao.StudentDAO"></property>
</bean>
</beans>

单元测试:

package net.wchdai.spring.test;

import net.wchdai.spring.dao.StudentDAO;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import junit.framework.TestCase;

public class StudentAOPTest extends TestCase{
    public void testAOPProxy(){
        ApplicationContext ctx = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        StudentDAO sdao=(StudentDAO)ctx.getBean("studentDaoProxyFactory");
        sdao.saveStudent();
    }
}

执行结果:

before
StudentDAOImpl save student
afterReturning

AOP实现方式1——经典的基于代理的AOP实现

1.定义接口Perform package com.show; /** * Created by kenneth on 2017/4/6. */ public interface Perfor...
  • csdn_kenneth
  • csdn_kenneth
  • 2017年04月06日 15:24
  • 395

最简单的动态代理实例(spring基于接口代理的AOP原理)

JDK的动态代理是基于接口的 package  com.open.aop; public   interface  BusinessInterface  {     public   void  pr...
  • yaohonv
  • yaohonv
  • 2011年07月27日 10:10
  • 1379

基于JDK动态代理的经典Spring AOP

我们知道,要使用JDK的动态代理,目标类需要实现
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2014年04月12日 11:38
  • 1090

SpringAop 类代理模式与接口代理模式

前两天在学习Spring的切面编程,利用@EnableAspectJAutoProxy标签开启切面。却始终得不到想要的结果。不多说,直接上demo代码。 spring配置类 package co...
  • xwh9004
  • xwh9004
  • 2017年07月02日 12:23
  • 382

基于CGLIB代理的经典Spring Aop

经典的Spring Aop可以基于JDK动态代理,也可以基于
  • zhangzeyuaaa
  • zhangzeyuaaa
  • 2014年04月12日 15:03
  • 1825

Spring—AOP两种代理机制对比(JDK和CGLib动态代理)

Sprign 动态代理机制 Spirng的AOP的动态代理实现机制有两种,分别是: 1)JDK动态代理: 具体实现原理: 1、通过实现InvocationHandlet接口创建自己的调...
  • qq1723205668
  • qq1723205668
  • 2017年02月22日 12:09
  • 2935

Spring进阶之路(9)-Spring AOP面向切面编程概念以及通过JDK代理生成AOP代理对象

在软件开发中,分布于应用中多处的功能被称为横切关注点,,通常情况下,这些横切关注点从概念上是与应用的业务逻辑相分离的。将这些横切关注点与我们的业务逻辑相分离是面向切面编程AOP所要解决的事情。 ...
  • wangyang1354
  • wangyang1354
  • 2016年03月14日 22:39
  • 2045

Spring AOP的代理模式详解

Spring AOP的代理模式详解 代理模式:代理模式的英文叫做Proxy或Surrogate,中文都可译为”代理“,所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些...
  • judyfun
  • judyfun
  • 2015年05月25日 20:39
  • 7966

Spring AOP实践(一)动态代理和静态代理,为什么使用AOP

作为Spring仅次于IOC的第二大代表功能,AOP的应用就不是很广泛了。众所周知AOP是面向方面编程,是对面向对象编程做出补充的一种编程方式。AOP使得编程人员可以把分散在代码各个地方的相同功能抽象...
  • nokiaisacat
  • nokiaisacat
  • 2016年08月22日 20:39
  • 2240

实现spring Aop 注解实现事务处理

声明式事务管理也有两种常用的方式,一种是基于tx和aop名字空间的xml配置文件,另一种就是基于@Transactional注解。显然基于注解的方式更简便和防spring侵入。 以myBat...
  • D_ohko
  • D_ohko
  • 2018年01月05日 13:57
  • 47
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Spring, 基于代理的AOP
举报原因:
原因补充:

(最多只允许输入30个字)