ProxyFactoryBean(代码)
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(代码)相关推荐
- 隐私合规:收集SDK部分介绍
com.meizu.cloud.pushsdk.SystemReceiver 魅族推送服务是由魅族公司为开发者提供的消息推送服务,开发者可以向集成了魅族 push SDK 的客户端实时地推送通知或者消 ...
- 使用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代 ...
- Spring通知类型及使用ProxyFactoryBean创建AOP代理
Spring 通知类型 通知(Advice)其实就是对目标切入点进行增强的内容,Spring AOP 为通知(Advice)提供了 org.aopalliance.aop.Advice 接口. Spr ...
- Spring AOP自动创建代理 和 ProxyFactoryBean创建代理
Advice 通知类型 AOP联盟为通知Advice定义了org.aopalliance.aop.Interface.Advice,Spring按照通知Advice在目标方法的连接点位置,可以分为5种 ...
- Spring源码分析之ProxyFactoryBean方式实现Aop功能的分析
实现Aop功能有两种方式, 1. ProxyFactoryBean方式: 这种方式是通过配置实现 2. ProxyFactory方式:这种方式是通过编程实现 这里只说ProxyFactoryBean方 ...
- Spring AOP实现声明式事务代码分析
众所周知,Spring的声明式事务是利用AOP手段实现的,所谓"深入一点,你会更快乐",本文试图给出相关代码分析. AOP联盟为增强定义了org.aopalliance.aop.A ...
- 结合代码彻底理解Spring AOP的术语
每本Spring的书在介绍AOP之前,总能有一箩筐的术语,看半天似懂非懂,也就没兴趣再继续学习下去,其实并没有这么复杂. 难懂的定义我们就不贴了,就说说咱们通俗的解释,下面让我们结合代码来理清楚各个术 ...
- Java代码设计模式讲解二十三种设计模式
设计模式 文章目录 设计模式 一.创造型设计模式 1.1 单例模式 1.1.1 饿汉式单例模式 1.1.2 懒汉式单例模式 (1)线程不安全的情况 (2)线程安全的情况 1. 实例化的方法上加sync ...
- 架构师集合之23种开发模式详解(代码举例,相似模式分析异同)
设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 一.设计模式的分类 ...
最新文章
- 重磅直播|中科慧眼崔峰博士详解深度相机原理及其应用
- mfc cedit 默认显示内容_VS2013/MFC编程学习(一)
- python3 模板库 好用_Python3的string库模板的应用
- SwitchHosts-win32-x64
- http 请求默认时间_JMeter接口测试之HTTP请求默认值
- 乐橙本地录像回放不了_乐橙智能锁来告诉你:你家门真的安全吗?
- mysql和mysqli的区别
- python 读取xlsx特定页_python 读取 Excel
- DIPS工具实现解释
- 在夜神模拟器内部安装App
- 音频格式处理--SOX
- readlink /var/lib/docker/overlay2: invalid argument的解决方案
- 贤鱼的刷题日常【c++动态规划】4978:宠物小精灵之收服
- 怎样实现在单片机上跑LINUX系统,简述Linux如何应用在嵌入式单片机上
- 【ELT.ZIP】《CCF开源高校行第一期》观后感
- php转调页面,怎样练到转调弹奏信手捏来,太实用
- ssm电商背景下精品茶网站的设计与实现毕业设计-附源码191732
- Efficient Fully Homomorphic Encryption from (Standard) LWE 论文理解
- JavaSE 第 3 章 数组
- python数据分析优势-用Python做数据分析有哪些优势?
热门文章
- SMARTFORM 转 PDF
- AI业务强劲增长,百度迎来了“推卒过河”的纵横时刻
- linux keepalived 脚本,Linux下 keepalived 的安装和配置
- 微型计算机课程介绍,微机原理及应用课程教学大纲教案
- 英语四级计算机准考证查询,四级成绩查询_四级查分:什么?准考证不见了?!!!_沪江英语...
- sql跨数据库如何访问linux 下mysql_SQL跨数据库访问linux或windows的mysql和定时作业 (转)...
- 服务器write后客户端响应,客户端解析服务器响应的multipart/form-data数据
- python教程:ConfigParser模块使用教程
- 零基础学Python:使用type、metaclass动态创建方法和属性的详细用法
- python基础教程:多态、多继承、函数重写、迭代器详细教程