spring中的AOP是通过Java的动态代理实现的,有关动态代理的详细解释参见:
http://dyygusi.iteye.com/blog/1994843
现在就使用Java的动态代理模拟AOP(使用JDK的动态代理)
1.建立实体对象
public class User { Integer id; String name; String pwd; public User() { } public User(int id, String name, String pwd) { this.id = id; this.name = name; this.pwd = pwd; } //setter/getter }
2.建立接口
public interface UserDao { public void addUser(User user); }
3.实现接口
public class UserDaoImpl implements UserDao{ @Override public void addUser(User user){ System.out.println("保存User到数据库中"); throw new RuntimeException(); } }
4.创建拦截器(这个类就相当于aop中的切面类)
public class MyInterceptor implements InvocationHandler { private Object target; public MyInterceptor() { } public MyInterceptor(Object target) { this.target = target; } public Object getTarget() { return target; } public void setTarget(Object target) { this.target = target; } public void before() { System.out.println("这是一个前置通知"); } public void afterReturning() { System.out.println("这是一个后置通知"); } public void afterThrowing() { System.out.println("这是一个异常通知"); } public void after() { System.out.println("这是一个最终通知"); } @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable { Object returnValue = null; try { before(); returnValue = method.invoke(target, args); afterReturning(); } catch (Exception e) { afterThrowing(); } finally { after(); } return returnValue; } }
5.通过代理对象实现目标方法
@Test public void testAOP() { UserDao userDao = new UserDao(); MyInterceptor interceptor = new MyInterceptor(); interceptor.setTarget(userDao); //通过代理的静态方法创建一个代理对象 //这个代理创建的时候,接收了接口类型和拦截器的处理类,在代理的背后,他会调运拦截器的invoke这个方法。 //因为传递的有接口类型,所以可以强制类型转换到我们指定的接口类型 UserDao userDaoProxy = (UserDao) Proxy.newProxyInstance(this.getClass().getClassLoader(), userDao.getClass().getInterfaces(), interceptor); //然后在代理对象处理的时候,就会将我的逻辑织如到被代理的对象上 userDaoProxy.addUser(new User(1, "a", "b")); }
6.程序输出
这是一个前置通知 保存User到数据库中 这是一个异常通知 这是一个最终通知
相关推荐
通过动态代理模拟Spring AOP,通过动态代理模拟Spring AOP
java 动态代理实现,模拟了spring实现aop的原理,对学习面向切面编程的朋友有帮助!
NULL 博文链接:https://zlx19900228.iteye.com/blog/843289
模拟spring aop技术,一个小demo,希望对您理解aop有所帮助.
以注解方式模拟Spring IoC AOP,了解Spring是如何实现的.
我们还提供了实际示例,演示如何在Spring AOP中使用JDK动态代理。 CGLib动态代理: 我们将深入研究CGLib动态代理,它允许您在不需要接口的情况下创建代理对象。您将了解CGLib的工作原理,以及如何生成子类来实现...
1、编写切面类,包含权限审核方法和日志记录方法,这两个方法将来会织入到...5、编写案例,运用Spring AOP技术,要求包含前置通知、后置通知、环绕通知、返回通知、异常返回通知。请掌握这五种通知的特点,及应用场景
基于java简单模拟实现spring_ioc
这是个模拟spring ioc的学习例子,是个java工程。有助于对aop和ioc的理解
1. 定义一个MyClass类(或接口),包括math()、english()和physics()方法,可以简单模拟输出:上数学课/英语课/物理...请选择使用JDK动态代理、CGLIB代理、ProxyFactoryBean或者AspectJ中的某一种方式来实现增强处理。
OOP引入封装、继承和多态性等概念来建立一种对象层次结构,用以模拟公共行为的一个集合。当我们需要为分散的对象引入公共行为的时候,OOP则显得无能为力。也是说,OOP允许你定义从上到下的关系,但并不适合定义从左...
ASM操作字节码,动态生成Java类class文件,模拟Spring的AOP实现原理。
利用了Spring AOP机制解决了Ajax应用的权限检查问题,应用权限检查推迟到业务逻辑层方法中进行。当权限检查失败时候,会抛出一个自己定义的AuctionException异常。 此外,还利用到了Spring的任务调度和邮件支持。当...
(10) spring-support.jar 这个jar文件包含支持缓存Cache(ehcache)、JCA、JMX、邮件服务(Java Mail、COS Mail)、任务计划Scheduling(Timer、Quartz)方面的类。 (11) spring-web.jar 这个jar文件包含Web应用...
spring Aop配置示例说明,通过模拟mvc实现,service层异常补货.rar
9) spring -hibernate.jar需spring-core.jar,spring-beans.jar,spring-aop.jar,spring- dao.jar,spring-jdbc.jar,spring-orm.jar,spring-web.jar,spring-webmvc.jar 10) spring-orm.jar需spring-core.jar,...
使用基于AOP的Spring特性,如声明型事务管理(Declarative Transaction Management),也要在应用里包含这个jar包。 (4) spring-context.jar 这个jar文件为Spring核心提供了大量扩展。可以找到使用Spring ...
Spring3.0是Spring在积蓄了3年之久后,隆重推出的一个重大升级版本,进一步加强了Spring作为Java领域第一开源平台的翘楚地位。 Spring3.0引入了众多Java开发者翘首以盼的新功能和新特性,如OXM、校验及格式化框架...
Spring模拟,可创建对象和spring getbean一样,支持简单AOP,可用于dao,service,web层接偶。用注解实现。必须在service定义dao层一个接口,那么该工具将自动在配置的扫描bean中找到该类(接口)的实现类(不必再...