Spring - AOP之传统自动代理
发布日期:2021-06-30 23:47:21 浏览次数:2 分类:技术文章

本文共 3817 字,大约阅读时间需要 12 分钟。

一、AOP之传统自动代理——基于Bean名称的自动代理

package com.imooc.aop.demo5;public class CustomerDao {    public void find(){        System.out.println("查询客户...");    }    public void save(){        System.out.println("保存客户...");    }    public void update(){        System.out.println("修改客户...");    }    public void delete(){        System.out.println("删除客户...");    }}
package com.imooc.aop.demo5;public interface StudentDao {    public void find();    public void save();    public void update();    public void delete();}
package com.imooc.aop.demo5;public class StudentDaoImpl implements StudentDao {    public void find() {        System.out.println("学生查询...");    }    public void save() {        System.out.println("学生保存...");    }    public void update() {        System.out.println("学生修改...");    }    public void delete() {        System.out.println("学生删除...");    }}
package com.imooc.aop.demo5;import org.aopalliance.intercept.MethodInterceptor;import org.aopalliance.intercept.MethodInvocation;public class MyAroundAdvice implements MethodInterceptor {    public Object invoke(MethodInvocation invocation) throws Throwable {        System.out.println("环绕前增强===================");        Object obj = invocation.proceed();        System.out.println("环绕后增强===================");        return obj;    }}
package com.imooc.aop.demo5;import org.springframework.aop.MethodBeforeAdvice;import java.lang.reflect.Method;public class MyBeforeAdvice implements MethodBeforeAdvice {    public void before(Method method, Object[] args, Object target) throws Throwable {        System.out.println("前置增强======================");    }}
package com.imooc.aop.demo5;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext3.xml")public class SpringDemo5 {    @Resource(name="studentDao")    private StudentDao studentDao;    @Resource(name="customerDao")    private CustomerDao customerDao;    @Test    public void demo1(){        studentDao.find();        studentDao.save();        studentDao.update();        studentDao.delete();        customerDao.find();        customerDao.save();        customerDao.update();        customerDao.delete();    }}
运行结果:前置增强======================学生查询...前置增强======================学生保存...前置增强======================学生修改...前置增强======================学生删除...前置增强======================查询客户...前置增强======================保存客户...前置增强======================修改客户...前置增强======================删除客户...

 

二、AOP之传统自动代理——基于切面信息的自动代理

Ps:其余代码同上……

package com.imooc.aop.demo6;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.annotation.Resource;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration("classpath:applicationContext4.xml")public class SpringDemo6 {    @Resource(name="studentDao")    private StudentDao studentDao;    @Resource(name="customerDao")    private CustomerDao customerDao;    @Test    public void demo1(){        studentDao.find();        studentDao.save();        studentDao.update();        studentDao.delete();        customerDao.find();        customerDao.save();        customerDao.update();        customerDao.delete();    }}
运行结果:学生查询...学生保存...学生修改...学生删除...查询客户...环绕前增强===================保存客户...环绕后增强===================修改客户...删除客户...

两者区别:

  • 基于切面信息 较 基于Bean名称,更加细粒度化,可以精确到方法。

转载地址:https://lux-sun.blog.csdn.net/article/details/84324009 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Spring - AOP之AspectJ(注解)
下一篇:IntelliJ IDEA - 报错篇

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月24日 07时28分58秒