设为首页 加入收藏

TOP

SSH框架之Spring第三篇(四)
2019-09-23 11:13:08 】 浏览:195
Tags:SSH 框架 Spring 第三篇
通知类型全部采用注解方式 * @Before 前置通知 * @AfterReturning 后置通知,目标对象方法执行成功 * @AfterThrowing 异常通知 * @After 最终通知
*/ // @Before(value="execution(public * com.baidu.demo1.*.save(..))") // @AfterReturning(value="execution(public * com.baidu.demo1.*.save(..))") // @AfterThrowing(value="execution(public * com.baidu.demo1.*.save(..))") // @After(value="execution(public * com.baidu.demo1.*.save(..))") public void log(){ System.out.println("记录日志..."); } /** * 环绕通知 */ // @Around(value="execution(public * com.baidu.demo1.*.save(..))") @Around(value="MyAnnoAspect.fn()") public void arond(ProceedingJoinPoint pp){ try { System.out.println("记录日志..."); // 让目标对象方法执行 pp.proceed(); System.out.println("记录日志..."); } catch (Throwable e) { e.printStackTrace(); } } /** * 定义切入点的表达式 */ @Pointcut(value="execution(public * com.baidu.demo1.*.save(..))") public void fn(){} } 基于子类的动态代理: package com.baidu.demo2; import java.lang.reflect.Method; import org.springframework.cglib.proxy.Enhancer; import org.springframework.cglib.proxy.MethodInterceptor; import org.springframework.cglib.proxy.MethodProxy; /** * 使用cglib方式生成代理对象 * 不用实现接口 * @author Administrator */ public class MyCglibProxy { /** * 获取到代理对象 * @return */ public static RoleServiceImpl getProxy(final RoleServiceImpl role){ Enhancer e = new Enhancer(); // 设置父类 e.setSuperclass(role.getClass()); // 设置回调函数 e.setCallback(new MethodInterceptor() { // 调用代理对象的方法,那么intercept方法就会执行 public Object intercept(Object arg0, Method method, Object[] args, MethodProxy methodProxy) throws Throwable { // 让目标对象方法执行 Object invoke = methodProxy.invoke(role, args); // 增强 System.out.println("记录日志..."); return invoke; } }); // 创建代理对象 Object proxy = e.create(); // 把代理对象返回 return (RoleServiceImpl) proxy; } } <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> <!-- 管理service --> <bean id="userService" class="com.baidu.demo1.UserServiceImpl"/> <!-- 先配置切面类 --> <bean id="myXmlAspect" class="com.baidu.demo1.MyXmlAspect"/> <!-- 配置AOP的增强 <aop:config> --> <!-- 配置切面 = 切入点 (表达式)+ 通知 <aop:aspect ref=&qu
首页 上一页 1 2 3 4 5 6 下一页 尾页 4/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SSH框架之Spring第二篇 下一篇03.Django基础三之视图函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目