使用Spring自动生成代理类,spring利用的是动态代理机制 
接口

Java代码 
public interface UserDao { 
void addUser(); 
void deleteUser(); 

两个实现:

Java代码 
public class UserDaoMySqlImpl implements UserDao {   
  
@Override  
public void addUser() {   
  System.out.println("UserDaoMySqlImpl.addUser()");   
}   
  
@Override  
public void deleteUser() {   
  System.out.println("UserDaoMySqlImpl.deleteUser()");   
  
}   
  
}

public class UserDaoOracleImpl implements UserDao {

@Override 
public void addUser() { 
  System.out.println("UserDaoOracleImpl.addUser()"); 
}

@Override 
public void deleteUser() { 
  System.out.println("UserDaoOracleImpl.deleteUser()"); 
}


Device 
import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;

public class UserDaoBeforeAdvice implements MethodBeforeAdvice {

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

}

spring的配置文件

Xml代码 
<!-- 配置实现类的bean,可以把所有的实现类都写上 -->  
<bean id="userdao" class="com.dowebber.spring.aop.UserDaoMySqlImpl"></bean>  
<!--配置Advice的bean -->  
<bean id="beforeadvice" class="com.dowebber.spring.aop.UserDaoBeforeAdvice"></bean>  
<!--配置spring自动生成代理对象所需要的一些参数 -->  
<bean id="userdaoproxy" class="org.springframework.aop.framework.ProxyFactoryBean">  
<property name="proxyInterfaces" value="com.dowebber.spring.aop.UserDao"/>  
<property name="target">  
  <ref bean="userdao"/>  
</property>  
<property name="interceptorNames">  
  <list>  
   <value>beforeadvice</value>  
  </list>  
</property>  
</bean>

测试类:

Java代码 
import org.springframework.context.ApplicationContext;   
import org.springframework.context.support.ClassPathXmlApplicationContext;   
  
public class TestUserDaoBeforeDevice {   
  
public static void main(String[] args) {   
     
  ApplicationContext context = new ClassPathXmlApplicationContext("com/dowebber/spring/aop/spring.xml");   
  UserDao dao = (UserDao)context.getBean("userdaoproxy");   
  dao.addUser();   
}   
  
}

AOP的MethodBeforeAdvice的更多相关文章

  1. Spring5最新完整教程IDEA版【通俗易懂2019.11月】

    1.Maven找包: spring-webmvc spring-jdbc 2.Spring的本质是控制反转,依靠依赖注入来实现.以一个servcie对象为例,即是service暴露注入接口(构造,se ...

  2. 学习AOP之认识一下Spring AOP

    心碎之事 要说知道AOP这个词倒是很久很久以前了,但是直到今天我也不敢说非常的理解它,其中的各种概念即抽象又太拗口. 在几次面试中都被问及AOP,但是真的没有答上来,或者都在面上,这给面试官的感觉就是 ...

  3. spring aop

    什么是AOP AOP(Aspect-OrientedProgramming,面向方面编程),它利用一种称为“横切”的技术,剖解开封装的对象内部,并将那些影响了多个类的公共行为封装到一个可重用模块,并将 ...

  4. Spring的IOC和AOP之深剖

    今天,既然讲到了Spring 的IOC和AOP,我们就必须要知道 Spring主要是两件事: 1.开发Bean:2.配置Bean.对于Spring框架来说,它要做的,就是根据配置文件来创建bean实例 ...

  5. AOP详解

    什么是AOP AOP Aspect Oriented Programing 面向切面编程 AOP采取横向抽取机制,取代了传统纵向继承体系重复性代码(性能监视.事务管理.安全检查.缓存) Spring ...

  6. Spring中Aop的扩展及剖析

    AOP简介: 面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是Spring框架中的一个重要内容,是函数式编程的一种衍生范 ...

  7. AOP面向切面编程的四种实现

     一.AOP(面向切面编程)的四种实现分别为最原始的经典AOP.代理工厂bean(ProxyFacteryBean)和默认自动代理DefaultAdvisorAutoProxyCreator以及Bea ...

  8. spring笔记--使用springAPI以及自定义类 实现AOP的一个例子

    Spring的另一个重要思想是AOP,面向切面的编程,它提供了一种机制,可以在执行业务前后执行另外的代码,Servlet中的Filter就是一种AOP思想的体现,下面通过一个例子来感受一下. 假设我们 ...

  9. Spring实现AOP的4种方式

    了解AOP的相关术语:1.通知(Advice):通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作.2.连接点(Joinpoint):程序能够应用通知的一个“时机”,这些“ ...

随机推荐

  1. Flask第六篇——项目配置文件

    我们在开发中,通常将一些需要用到的配置选项单独放在一个文件中,比如叫configs.py中.然后通过一些方式加载. 现在将加载配置文件的方法罗列如下: 1.先新建文件configs.py,文件代码: ...

  2. asp.net如何判断服务器上的目录或文件是否存在

    asp.net判断服务器上的目录或文件是否存在!(实例) // ======================================================= [判断文件是否存在] u ...

  3. @EnableAutoConfiguration注解原理

    前言 Spring Boot中引入了自动配置,让开发者利用起来更加的简便.快捷.比如内嵌的tomcat端口默认配置是8080,这些都属于Spring Boot自动配置的范畴,当然其自动配置相当多. s ...

  4. IO流-文件夹的拷贝

    文件夹的拷贝操作 要求: 完成文件夹的拷贝,包括子目录的拷贝和所有文件的拷贝 分析: 首先,得在目标目录下创建一个与源文件夹名称相同的文件夹 遍历源文件夹中的所有文件对象,判断子文件是目录还是文件 如 ...

  5. 顺丰品牌研究http://www.kiees.cn/sf/express/brand.htm

    顺丰控股股份有限公司,顺丰速运SF,始于1993年,国内速递行业中民族品牌的佼佼者,以其速度快/安全性能高蜚声业界,现已开通海外快递服务,2017年2月完成借壳上市 1993年,顺丰诞生于广东顺德.自 ...

  6. distinct和group by的性能比较

    distinct和group by的性能比较 当去重复的字段 的个数比较多的时候,group by 比distinct要快很多 当去重复的字符 的个数比较少的时候,distinct 比group by ...

  7. python 与时间有关的操作

    python保存时间戳文件 import time # ISOTIMEFORMAT='%Y-%m-%d %X' ISOTIMEFORMAT='%Y-%m-%d' t= time.strftime( I ...

  8. jdk1.8新特性之函数式接口

    函数式接口就是只有一个抽象方法的接口.如果这个接口里没有或者包含了两个以上的抽象方法,对不起,你不叫函数式接口,只能叫你接口.那这个函数式有啥用呢?如果配合Lambda表达式的话,可以大大的简化代码. ...

  9. HTML第一讲

    HTML标记区分 HTML即超文本标记语言(HtyperText Markup Language),其作用就是将编辑的内容在屏幕上显示.文件的后缀为.HTML. 在HTML中成对出现的叫做双标记(譬如 ...

  10. VBA7种遍历方法

    Sub 在选定文档最后加入一句话() '遍历文件 Dim MyDialog As FileDialog On Error Resume NextApplication.ScreenUpdating = ...