使用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();   
}   
  
}

转载于:https://www.cnblogs.com/toSeeMyDream/p/4378970.html

AOP的MethodBeforeAdvice相关推荐

  1. 手撸Spring系列10:Spring AOP(实战篇)

    说在前头: 笔者本人为大三在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正. ...

  2. 简单两步,spring aop上手即用即会

    面向切面思想在于它的干净,对逻辑代码没有任何侵入性,只需要在想要切入的方法或者类之上加上自定义的注解即可. 首先,就是自定义一个注解: //这里我们定义一个名为 @MyPointer 的注解 @Doc ...

  3. Spring AOP与IOC

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  4. Spring AOP与IOC以及自定义注解

    Spring AOP实现日志服务 pom.xml需要的jar <dependency><groupId>org.apache.commons</groupId>&l ...

  5. Spring基础专题——第五章(Aop代理)

    前言:去年到现在一直没有很好的时间完成这个spring基础+源码的博客目标,去年一年比较懒吧,所以今年我希望我的知识可以分享给正在奋斗中的互联网开发人员,以及未来想往架构师上走的道友们我们一起进步,从 ...

  6. [Spring 深度解析]第4章 Spring之AOP

    第4章 ◄Spring之AOP► 在上一章节中,我们大致了解了Spring核心容器,了解了IOC思想在Spring中的具体应用Bean容器以及Bean的配置与使用,这一章我们将开始学习AOP在Spri ...

  7. 深入解析Spring架构与设计原理-AOP

    2019独角兽企业重金招聘Python工程师标准>>> 关于AOP的个人理解 AOP联盟定义的AOP体系结构把与AOP相关的概念大致分为了由高到低.从使用到实现的三个层次.关于这个体 ...

  8. Spring从菜鸟到高手(二)AOP的真正实现

    经过了前面一章的学习大家基本理解了SpringAOP的简单工作原理,但是那只是最基本的一些操作,Spring的设计师们知道我们不想在诸如得到一个代理类.需要实现哪些接口 这些琐碎的事情上牵扯过多的经历 ...

  9. aop的四种增强以及JDK动态代理、Cglib动态代理

    动态代理 AOP底层实现:有接口自动应用的就是JDK动态代理 (1).JDK 在运行时运行时注入 本质:在内存中构建出接口的实现类 特点:被代理对象,必须有接口 实例: import java.lan ...

最新文章

  1. Linux串口原理与编程
  2. Sqlserver 错误日志太大导致硬盘空间不足
  3. RDIFramework.NET ━ .NET快速信息化系统开发框架 V3.2- “Tab”标签新增可“最大化”显示功能...
  4. SAP职业生涯中12个最致命想法
  5. HD 1253 胜利大逃亡(bfs)
  6. C语言九十四之请编写函数fun(char *str, int n),其功能是:使字符串str的前导*号不能多余n个,若多于n个,则删除多余的*号,若少于或等于n个,则不做处理。
  7. Ant in Action读书笔记(三):在Ant中导入环境变量
  8. Onvif备忘录(2)----客户端端设备发现
  9. 微信小程序chooseImage(从本地相册选择图片或使用相机拍照)
  10. ArrayList Vector
  11. 单片机蜂鸣器编程音乐_工程师,还有6个引脚封装的单片机?涨知识了
  12. 【转】在唯一密钥属性“value”设置为“***”时,无法添加类型为“add”的重复集合项解决方法
  13. 修改R语言安装包的默认路径
  14. 各类文件的文件头标志
  15. html视频文件哪种格式好,常见的视频格式有哪些?
  16. php 图片 字母识别,PHP图片文字识别(OCR)
  17. 《Python渗透测试编程技术:方法与实践》:信息的利用(进阶)
  18. 网站备案和域名实名认证的重要性
  19. 要来了!国内安卓统一推送标准将于 今年3 月开启测试
  20. pygame-KidsCanCode系列jumpy-part18-背景滚动

热门文章

  1. Redis学习笔记(11)——Redis缓存集群方案
  2. Windows下简单好用的php平台:XAMPP Wamp5和AppServ
  3. Linux有待完善的小缺陷的累记
  4. Android传感器开发详解
  5. android开源许可证
  6. GDB调试程序-Ubuntu
  7. 设计模式---单例模式(多线程下的单例模式)
  8. QTP的Action之间传递参数
  9. nginx实现大小写字母转换(ngx_http_lower_upper_case模块)
  10. opencv多线程显示的问题和解决方法