UserDao.java接口:

package com.liu.jdk;public interface UserDao {public void addUser();public void deleteUser();}

UserDaoImpl.java接口实现类:

package com.liu.jdk;//目标类
public class UserDaoImpl implements UserDao {@Overridepublic void addUser() {// TODO Auto-generated method stubSystem.out.println("添加方法");}@Overridepublic void deleteUser() {// TODO Auto-generated method stubSystem.out.println("删除方法");}}

MyAspect.java切面类:

package com.liu.factorybean;import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;public class MyAspect implements MethodInterceptor {public void chek() {System.out.println("模拟检查权限...");}public void log() {System.out.println("模拟记录日志...");}@Overridepublic Object invoke(MethodInvocation arg) throws Throwable {// TODO Auto-generated method stubchek();Object obj = arg.proceed();log();return obj;}}

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/beanshttp://www.springframework.org/schema/beans/spring-beans-4.3.xsd "><!-- 1 目标类 --><bean id = "userDao" class = "com.liu.jdk.UserDaoImpl"></bean><!-- 2 切面类 --><bean id = "aspect" class = "com.liu.factorybean.MyAspect"></bean><!-- 3 使用spring代理工厂定义一个名称为userDaoProxy的代理对象 --><bean id = "userDaoProxy" class = "org.springframework.aop.framework.ProxyFactoryBean"><!-- 3.1 指定代理实现的接口--><property name="proxyInterfaces" value = "com.liu.jdk.UserDao"></property><!-- 3.2 指定目标对象 --><property name="target" ref = "userDao"></property><!-- 3.3 指定切面 织入环绕通知 --><property name="interceptorNames" value = "aspect"></property><!-- 3.4 指定代理方式 true:使用cglib,false:使用jdk(默认false) --><property name="proxyTargetClass" value = "true"></property></bean></beans>

FactoryBeanTest.java测试类:

package com.liu.factorybean;import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;import com.liu.jdk.UserDao;public class FactoryBeanTest {public static void main(String[] args) {String xmlpath = "com/liu/factorybean/ApplicationContext.xml";ApplicationContext applicationContext = new ClassPathXmlApplicationContext(xmlpath);UserDao userDao = (UserDao) applicationContext.getBean("userDaoProxy");//执行userDao.addUser();userDao.deleteUser();}}

运行结果:

模拟检查权限...
添加方法
模拟记录日志...
模拟检查权限...
删除方法
模拟记录日志...

需要的包:

ProxyFactoryBean(代码)相关推荐

  1. 隐私合规:收集SDK部分介绍

    com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...

  2. 使用ProxyFactoryBean创建AOP代理 - Spring Framework reference 2.0.5 参考手册中文版

    http://doc.javanb.com/spring-framework-reference-zh-2-0-5/ch07s05.html 7.5. 使用ProxyFactoryBean创建AOP代 ...

  3. Spring通知类型及使用ProxyFactoryBean创建AOP代理

    Spring 通知类型 通知(Advice)其实就是对目标切入点进行增强的内容,Spring AOP 为通知(Advice)提供了 org.aopalliance.aop.Advice 接口. Spr ...

  4. Spring AOP自动创建代理 和 ProxyFactoryBean创建代理

    Advice 通知类型 AOP联盟为通知Advice定义了org.aopalliance.aop.Interface.Advice,Spring按照通知Advice在目标方法的连接点位置,可以分为5种 ...

  5. Spring源码分析之ProxyFactoryBean方式实现Aop功能的分析

    实现Aop功能有两种方式, 1. ProxyFactoryBean方式: 这种方式是通过配置实现 2. ProxyFactory方式:这种方式是通过编程实现 这里只说ProxyFactoryBean方 ...

  6. Spring AOP实现声明式事务代码分析

    众所周知,Spring的声明式事务是利用AOP手段实现的,所谓"深入一点,你会更快乐",本文试图给出相关代码分析. AOP联盟为增强定义了org.aopalliance.aop.A ...

  7. 结合代码彻底理解Spring AOP的术语

    每本Spring的书在介绍AOP之前,总能有一箩筐的术语,看半天似懂非懂,也就没兴趣再继续学习下去,其实并没有这么复杂. 难懂的定义我们就不贴了,就说说咱们通俗的解释,下面让我们结合代码来理清楚各个术 ...

  8. Java代码设计模式讲解二十三种设计模式

    设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...

  9. 架构师集合之23种开发模式详解(代码举例,相似模式分析异同)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 一.设计模式的分类 ...

最新文章

  1. 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
  2. mfc cedit 默认显示内容_VS2013/MFC编程学习(一)
  3. python3 模板库 好用_Python3的string库模板的应用
  4. SwitchHosts-win32-x64
  5. http 请求默认时间_JMeter接口测试之HTTP请求默认值
  6. 乐橙本地录像回放不了_乐橙智能锁来告诉你:你家门真的安全吗?
  7. mysql和mysqli的区别
  8. python 读取xlsx特定页_python 读取 Excel
  9. DIPS工具实现解释
  10. 在夜神模拟器内部安装App
  11. 音频格式处理--SOX
  12. readlink /var/lib/docker/overlay2: invalid argument的解决方案
  13. 贤鱼的刷题日常【c++动态规划】4978:宠物小精灵之收服
  14. 怎样实现在单片机上跑LINUX系统,简述Linux如何应用在嵌入式单片机上
  15. 【ELT.ZIP】《CCF开源高校行第一期》观后感
  16. php转调页面,怎样练到转调弹奏信手捏来,太实用
  17. ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732
  18. Efficient Fully Homomorphic Encryption from (Standard) LWE 论文理解
  19. JavaSE 第 3 章 数组
  20. python数据分析优势-用Python做数据分析有哪些优势?

热门文章

  1. SMARTFORM 转 PDF
  2. AI业务强劲增长,百度迎来了“推卒过河”的纵横时刻
  3. linux keepalived 脚本,Linux下 keepalived 的安装和配置
  4. 微型计算机课程介绍,微机原理及应用课程教学大纲教案
  5. 英语四级计算机准考证查询,四级成绩查询_四级查分:什么?准考证不见了?!!!_沪江英语...
  6. sql跨数据库如何访问linux 下mysql_SQL跨数据库访问linux或windows的mysql和定时作业 (转)...
  7. 服务器write后客户端响应,客户端解析服务器响应的multipart/form-data数据
  8. python教程:ConfigParser模块使用教程
  9. 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法
  10. python基础教程:多态、多继承、函数重写、迭代器详细教程