设为首页 加入收藏

TOP

SSH框架之Spring第三篇(三)
2019-09-23 11:13:08 】 浏览:196
Tags:SSH 框架 Spring 第三篇
告知spring,在创建容器时要扫描的包--> <context:component-scan base-package="com.baidu"></context:component-scan> 3.2 配置步骤 3.2.1第一步:把通知类也使用注解配置 /** * 一个记录日志的工具类 */ @Component("logger") public class Logger { /** * 期望:此方法在业务核心方法执行之前,就记录日志 * 前置通知 */ public void beforePrintLog(){ System.out.println("前置通知:Logger类中的printLog方法开始记录日志了"); } } 3.2.2第二步:在通知类上使用@Aspect注解声明为切面 /** * 一个记录日志的工具类 */ @Component("logger") @Aspect//表明当前类是一个切面类 public class Logger { /** * 期望:此方法在业务核心方法执行之前,就记录日志 * 前置通知 */ public void beforePrintLog(){ System.out.println("前置通知:Logger类中的printLog方法开始记录日志了"); } } 3.2.3第三步:在增强的方法上使用@Before注解配置前置通知 /** * 期望:此方法在业务核心方法执行之前,就记录日志 * 前置通知 */ @Before("execution(* com.baidu.service.impl.*.*(..))")//表示前置通知 public void beforePrintLog(){ System.out.println("前置通知:Logger类中的printLog方法开始记录日志了"); } 3.2.4第四步:在spring配置文件中开启spring对注解AOP的支持 <!-- 开启spring对注解AOP的支持 --> <aop:aspectj-autoproxy/> 3.3常用注解 3.3.1@Aspect: 作用: 把当前类声明为切面类。 3.3.2@Before: 作用: 把当前方法看成是前置通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 3.3.3@AfterReturning 作用: 把当前方法看成是后置通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 3.3.4@AfterThrowing 作用: 把当前方法看成是异常通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 3.3.5@After 作用: 把当前方法看成是最终通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 3.3.6@Around 作用: 把当前方法看成是环绕通知。 属性: value:用于指定切入点表达式,还可以指定切入点表达式的引用。 3.3.7@Pointcut 作用: 指定切入点表达式 属性: value:指定表达式的内容 3.4不使用XML的配置方式 @Configuration @ComponentScan(basePackages="com.baidu") @EnableAspectJAutoProxy public class SpringConfiguration { } 总结 : 方法称为连接点. 切入点 : 具体对那个方法做增强.切入点的表达式. Advice(通知/增强) : 对save方法做增强,编写程序增强要做的事情. 通知类型 : 前置通知,后置通知,最终通知,异常通知和环绕通知. Target(目标对象) : UserServiceImpl对象 Proxy (代理) : 生成的代理对象 Aspect(切面) : 抽象的概念 切面 = 切入点 + 通知. Weaving(织入) : 是指把增强应用到目标对象来创建新的代理对象的过程. AOP配置文件开发步骤 : 1 : 导入jar包 2 : 编写切面类,编写通知的方法(自己来编写的) 3 : 配置切面类,进行IOC的管理 4 : 编写AOP的增强. <aop:config> <!--配置切面 = 切入点(表达式) + 通知 --> <aop:aspect ref="myXmlAspect"> <!--选择通知的类型,前置通知--> <aop:before method="log" pointcut="execution(public void com.baidu.demo1.UserServiceImpl.save())"/> </aop:aspect> </aop:config> <!-- 开启注解扫描 --> <context:component-scan base-package="com.baidu.demo1"/> <!-- 开启注解AOP --> <aop:aspectj-autoproxy/> package com.baidu.demo1; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.After; import org.aspectj.lang.annotation.AfterReturning; import org.aspectj.lang.annotation.AfterThrowing; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.annotation.Before; import org.aspectj.lang.annotation.Pointcut; import org.springframework.stereotype.Component; /** * 注解方式的切面类 * 声明当前类是切面类 * @author Administrator */ @Component("myAnnoAspect") @Aspect // 声明当前类是切面类 = 切入点表达式 + 通知类型 public class MyAnnoAspect { /** * 通知方法 * 配置通知类型,注解的属性编写的是切入点的表达式 *
首页 上一页 1 2 3 4 5 6 下一页 尾页 3/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇SSH框架之Spring第二篇 下一篇03.Django基础三之视图函数

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目