Spring AOP 入门示例
来源:互联网 发布:魔音变声软件下载 编辑:程序博客网 时间:2024/05/21 10:07
此示例根据尚硅谷佟刚老师的Spring4.0课程视频写成,仅在做记录,以备后用
1.新建Java工程,引入相关spring包,文件结构如下:
2.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"xmlns:aop="http://www.springframework.org/schema/aop"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"><!-- 配置自动扫描 --><context:component-scan base-package="com.yinhai.cj.demo1.aop.impl"/> <!-- 使aspectJ注解起作用:自动为匹配的类生成代理对象 --> <aop:aspectj-autoproxy></aop:aspectj-autoproxy></beans>
3.相关代码:
Caculator.java代码:
package com.yinhai.cj.demo1.aop.impl;public interface Caculator {int add(int i, int j);int sub(int i, int j);int mul(int i, int j);int div(int i, int j);}CaculatorImpl.java代码,使用注解将此对象放入IOC容器
package com.yinhai.cj.demo1.aop.impl;import org.springframework.stereotype.Component;@Componentpublic class CaculatorImpl implements Caculator {@Overridepublic int add(int i, int j) {int result = i + j;return result;}@Overridepublic int sub(int i, int j) {int result = i - j;return result;}@Overridepublic int mul(int i, int j) {int result = i * j;return result;}@Overridepublic int div(int i, int j) {int result = i / j;return result;}}
LoggingAspect.java 代码,
package com.yinhai.cj.demo1.aop.impl;import java.util.Arrays;import java.util.List;import org.aspectj.lang.JoinPoint;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.springframework.stereotype.Component;//把这个类声明为一个切面,首先需要将该类放入ioc容器中、再声明为一个切面@Component@Aspectpublic class LoggingAspect {// 声明该方法为一个前置通知:在目标方法开始之前执行@Before("execution(public int com.yinhai.cj.demo1.aop.impl.Caculator.*(int, int))")public void beforeMethod(JoinPoint joinPoint) {String methodName = joinPoint.getSignature().getName();List<Object> args = Arrays.asList(joinPoint.getArgs());System.out.println("The method " + methodName + " begin with " + args);}// 后置通知:在目标方法执行之后之后执行(无论是否发生异常)@After("execution(public int com.yinhai.cj.demo1.aop.impl.Caculator.*(..))")public void afterMethod(JoinPoint joinPoint) {String methodName = joinPoint.getSignature().getName();List<Object> args = Arrays.asList(joinPoint.getArgs());System.out.println("The method " + methodName + " after with " + args);}// 后置通知:在目标方法执行之后之后执行(无论是否发生异常)@AfterReturning(value="execution(public int com.yinhai.cj.demo1.aop.impl.Caculator.*(..))", returning="result")public void afterTeturning(JoinPoint joinPoint, Object result) {String methodName = joinPoint.getSignature().getName();System.out.println("The method " + methodName + " end with " + result);}// 异常返回通知:当目标方法发生异常时执行@AfterThrowing(value="execution(public int com.yinhai.cj.demo1.aop.impl.Caculator.*(..))",throwing="e")public void afterThrowing(JoinPoint joinPoint, Exception e){String methodName = joinPoint.getSignature().getName();System.out.println("The method " + methodName + " exception " + e);}}
Main.java代码
package com.yinhai.cj.demo1.aop.impl;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class Main {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");Caculator caculator = (Caculator) ctx.getBean(Caculator.class);int result = caculator.add(4, 1);System.out.println("result:" + result);result = caculator.div(4, 0);System.out.println("result:" + result);}}
执行结果:
0 0
- Spring AOP 入门示例
- AOP 容易入门示例
- spring Aop简单示例
- Spring aop简单示例
- spring aop简单示例
- spring aop示例
- Spring AOP示例
- Spring aop简单示例
- Spring AspectJ AOP 示例
- Spring aop学习示例
- spring AOP 示例
- Spring AOP示例
- Spring AOP入门篇
- Spring AOP入门
- Spring AOP 入门实例
- Spring AOP 入门
- Spring AOP 入门(2)
- Spring AOP 入门实例
- centos7+pacemaker+corosync+haproxy实现高可用
- iOS项目代码行数统计
- Spring3核心技术之事务管理机制
- Accp7.0 第15章 上机练习4
- java.lang.IncompatibleClassChangeError:Implementing class
- Spring AOP 入门示例
- WTF, 好多Unreal的知识点
- 最短路大比较
- 站内优化不该只更新文章?你还可以这么做
- 分布式计算第三周实验:Java Web 编程原理
- 【自学笔记】web前端 javascript笔试题 关于各种==的比较,js隐式转换
- iOS 学习笔记 多线程
- docker通过shell制作镜像
- python 批量修改文件名脚本