1、被代理类接口Person.java

 package com.xiaostudy;

 /**
* @desc 被代理类接口
*
* @author xiaostudy
*
*/
public interface Person { public void add();
public void update();
public void delete();
}

2、被代理类PersonImple.java

 package com.xiaostudy;

 /**
* @desc 被代理类
*
* @author xiaostudy
*
*/
public class PersonImple implements Person { /**
* @desc 实现接口方法
*/
public void add() {
System.out.println("add()>>>>>>>>");
} @Override
public void update() {
System.out.println("update()>>>>>>>>");
} @Override
public void delete() {
System.out.println("delete()>>>>>>>>");
} }

3、切面类MyAdvice.java

 package com.xiaostudy;

 import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation; /**
* @desc 切面类
*
* @author xiaostudy
*
*/
public class MyAdvice implements MethodInterceptor { /**
* @desc 环绕通知
*/
@Override
public Object invoke(MethodInvocation method) throws Throwable {
System.out.println("日记开始>>>>>>>>>>>");
method.proceed();
System.out.println("日记结束<<<<<<<<<<<<");
return null;
} }

4、spring配置文件applicationContext.xml

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

5、测试类Test.java

 package com.xiaostudy;

 import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; /**
* @desc 测试类
*
* @author xiaostudy
*
*/
public class Test { public static void main(String[] args) {
ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = ac.getBean("proxyPerson", Person.class);
person.add();
person.update();
person.delete();
} }

最新文章

  1. msbuild ConfuserEx.Build 加密
  2. JS判断客户端系统 让ipad iphone 等手持设备自动跳到手机版
  3. new 动态分配数组空间
  4. WP-Syntax 插件使用方法
  5. DVP
  6. asp.net mvc放在iis7.5中提示404错误 js异步请求失效解决办法
  7. &lt;iOS 组件与框架&gt; -- UIKit Dynamics
  8. StatefulSet(一):拓扑状态
  9. Flask 环境搭建
  10. 如何创建R包并将其发布在 CRAN / GitHub 上--转载
  11. Eclipse 语言包下载
  12. [AaronYang原创] 敏捷开发-Jira 6.0.5环境搭建[2]
  13. Linux操作_磁盘管理_增加虚拟磁盘
  14. 【redis中键的生存时间(expire) 】
  15. 【C#】BackgroundWorker类传递参数
  16. iOS基础--UIView的常见属性
  17. 浮点纹理 opengl
  18. 基于Codis的Redis集群部署
  19. .NET(C#):使用反射来获取枚举的名称、值和特性
  20. 软件工程课堂作业(二)续——升级完整版随机产生四则运算题目(C++)

热门文章

  1. iOS 遍历控件
  2. No transactional EntityManager available; nested exception is javax.persistence.TransactionRequiredException: No transactional EntityManager available
  3. 【IDEA】安装Jrebel插件:JRebel6.4.3+破解补丁
  4. Django设置中文,和时区、静态文件指向
  5. JavaScript 入门之常见对象
  6. Linux基础命令(一)
  7. 转!java产生不重复随机数
  8. unity 里调试native code
  9. django博客项目1.环境搭建
  10. CentOS7.1 KVM虚拟化之linux虚拟机安装(2)