1、被代理类接口Person.java

  1. package com.xiaostudy;
  2.  
  3. /**
  4. * @desc 被代理类接口
  5. *
  6. * @author xiaostudy
  7. *
  8. */
  9. public interface Person {
  10.  
  11. public void add();
  12. public void update();
  13. public void delete();
  14. }

2、被代理类PersonImple.java

  1. package com.xiaostudy;
  2.  
  3. /**
  4. * @desc 被代理类
  5. *
  6. * @author xiaostudy
  7. *
  8. */
  9. public class PersonImple implements Person {
  10.  
  11. /**
  12. * @desc 实现接口方法
  13. */
  14. public void add() {
  15. System.out.println("add()>>>>>>>>");
  16. }
  17.  
  18. @Override
  19. public void update() {
  20. System.out.println("update()>>>>>>>>");
  21. }
  22.  
  23. @Override
  24. public void delete() {
  25. System.out.println("delete()>>>>>>>>");
  26. }
  27.  
  28. }

3、切面类MyAdvice.java

  1. package com.xiaostudy;
  2.  
  3. import org.aopalliance.intercept.MethodInterceptor;
  4. import org.aopalliance.intercept.MethodInvocation;
  5.  
  6. /**
  7. * @desc 切面类
  8. *
  9. * @author xiaostudy
  10. *
  11. */
  12. public class MyAdvice implements MethodInterceptor {
  13.  
  14. /**
  15. * @desc 环绕通知
  16. */
  17. @Override
  18. public Object invoke(MethodInvocation method) throws Throwable {
  19. System.out.println("日记开始>>>>>>>>>>>");
  20. method.proceed();
  21. System.out.println("日记结束<<<<<<<<<<<<");
  22. return null;
  23. }
  24.  
  25. }

4、spring配置文件applicationContext.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://www.springframework.org/schema/beans
  5. http://www.springframework.org/schema/beans/spring-beans.xsd">
  6. <!-- 创建被代理类 -->
  7. <bean id="person" class="com.xiaostudy.PersonImple"></bean>
  8. <!-- 创建切面类 -->
  9. <bean id="advice" class="com.xiaostudy.MyAdvice"></bean>
  10. <!-- 创建代理类 -->
  11. <bean id="proxyPerson" class="org.springframework.aop.framework.ProxyFactoryBean">
  12. <!-- 把被代理类接口引入进来 -->
  13. <property name="interfaces" value="com.xiaostudy.Person"></property>
  14. <!-- 把被代理类引入进来 -->
  15. <property name="target" ref="person"></property>
  16. <!-- 把切面类引入进来,是以字符串形式引入,所以是用value,而不是用ref -->
  17. <property name="interceptorNames" value="advice"></property>
  18. <!-- 非必须项:value为true表示强制使用cglib代理 -->
  19. <property name="optimize" value="true"></property>
  20. </bean>
  21. </beans>

5、测试类Test.java

  1. package com.xiaostudy;
  2.  
  3. import org.springframework.context.ApplicationContext;
  4. import org.springframework.context.support.ClassPathXmlApplicationContext;
  5.  
  6. /**
  7. * @desc 测试类
  8. *
  9. * @author xiaostudy
  10. *
  11. */
  12. public class Test {
  13.  
  14. public static void main(String[] args) {
  15. ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
  16. Person person = ac.getBean("proxyPerson", Person.class);
  17. person.add();
  18. person.update();
  19. person.delete();
  20. }
  21.  
  22. }

spring半自动代理的更多相关文章

  1. AOP联盟通知类型和Spring编写代理半自动

    一.cglib功能更强大 二.Spring核心jar包 三.AOP联盟通知 三.代码实现Spring半自动代理 1.环绕通知的切面 2.bean.xml配置 3.创建bean容器,获取bean,即已经 ...

  2. Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误)

    Spring AOP代理时 ClassCastException: $Proxy0 cannot be cast to (类型转换错误) 问题: 今天在用AfterReturningAdvice时,a ...

  3. jdk动态代理与cglib代理、spring aop代理实现原理

    原创声明:本博客来源与本人另一博客[http://blog.csdn.net/liaohaojian/article/details/63683317]原创作品,绝非他处摘取 代理(proxy)的定义 ...

  4. jdk动态代理与cglib代理、spring aop代理实现原理解析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  5. 何为代理?jdk动态代理与cglib代理、spring Aop代理原理浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  6. Spring 静态代理+JDK动态代理和CGLIB动态代理

    代理分为两种:静态代理 动态代理 静态代理:本质上会在硬盘上创建一个真正的物理类 动态代理:本质上是在内存中构建出一个类. 如果多个类需要进行方法增强,静态代理则需要创建多个物理类,占用磁盘空间.而动 ...

  7. java中代理,静态代理,动态代理以及spring aop代理方式,实现原理统一汇总

    若代理类在程序运行前就已经存在,那么这种代理方式被成为 静态代理 ,这种情况下的代理类通常都是我们在Java代码中定义的. 通常情况下, 静态代理中的代理类和委托类会实现同一接口或是派生自相同的父类. ...

  8. jdk动态代理与cglib代理、spring Aop代理原理-代理使用浅析

    原创声明:本博客来源为本人原创作品,绝非他处摘取,转摘请联系博主 代理(proxy)的定义:为某对象提供代理服务,拥有操作代理对象的功能,在某些情况下,当客户不想或者不能直接引用另一个对象,而代理对象 ...

  9. Spring动态代理的生成-如何判断是使用JDK动态代理还是CGlib代理

    前言 在上一篇文章中讲到了Spring是如何获取对应的Bean的增强,然后本次主要讲解一下Spring如何在获取到增强后创建Spring代理的. 在步入正题之前先给大家看一下Spring创建代理的大致 ...

随机推荐

  1. NEU710(wanghang走迷宫)

    题目链接:传送门 题目大意:给你一个图,要从起点走到终点并且要吃够足够的金币才能出去,图上有金币(只能吃一次), 有传送门(用一次消耗1金币,必须有金币才能使用),问最少需要多少步才能出去.不能出去输 ...

  2. mybatis的dao的注解

    import com.jianwu.domain.metting.model.CallPreMember;import com.jianwu.domain.metting.model.CallPreM ...

  3. jQuery animate() - 使用相对值 在值的前面加上 += 或 -=

    也可以定义相对值(该值相对于元素的当前值).需要在值的前面加上 += 或 -=: 实例 $("button").click(function(){ $("div" ...

  4. 【IDEA】Maven踩坑:pom文件中的默认profiles不生效+IDEA中Maven的profiles使用说明

    一.问题即分析 项目pom文件中的profiles有3个配置:dev.test和production 默认配置的是dev,如下图: 但在本地起服务时,读取的配置始终是test里的. 二.原因 2.1 ...

  5. 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器

    一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...

  6. FineUI 获取x_state并解析

    public JObject PostBackStates() { JObject xState = null; if (Page.IsPostBack) { string state = HttpC ...

  7. php 使用imagettftext()函数出问题的原因

    <?php header('Content-type: image/png'); $im = imagecreatetruecolor(400, 300); //创建画布 $white = im ...

  8. MySQL 乐观锁与悲观锁

    悲观锁 悲观锁(Pessimistic Lock),顾名思义,就是很悲观,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁,这样别人想拿这个数据就会block直到它拿到锁. 悲观锁: ...

  9. 洛谷 P1641 [SCOI2010]生成字符串

    洛谷 这题一看就是卡塔兰数. 因为\(cnt[1] \leq cnt[0]\),很显然的卡塔兰嘛! 平时我们推导卡塔兰是用一个边长为n的正方形推的, 相当于从(0,0)点走到(n,n)点,向上走的步数 ...

  10. Linux学习笔记—Linux磁盘与文件系统管理(转载)

    认识EXT2文件系统 文件的系统特性 Linux的正规文件系统为Ext2 文件数据除了文件实际内容外,还包括其他属性(文件权限.文件属性). 文件系统将这两部分数据分别存放在不同的块,权限和属性放在i ...