文档章节

Spring基于xml配置bean AOP

黄柳淞
 黄柳淞
发布于 2017/01/04 01:05
字数 551
阅读 16
收藏 0

1.。ArithmeticCalculator.java

package com.huangliusong.spring.aop.xml;

public interface ArithmeticCalculator {
	int add(int i, int j);

	int sub(int i, int j);

	int mul(int i, int j);

	int div(int i, int j);
}


2。ArithmeticCalculatorImpl.java

package com.huangliusong.spring.aop.xml;


public class ArithmeticCalculatorImpl implements ArithmeticCalculator {

	@Override
	public int add(int i, int j) {
		int result = i + j;
		return result;
	}

	@Override
	public int sub(int i, int j) {
		int result = i - j;
		return result;
	}

	@Override
	public int mul(int i, int j) {
		int result = i * j;
		return result;
	}

	@Override
	public int div(int i, int j) {
		int result = i / j;
		return result;
	}

}


3。LoggingAspect.java

package com.huangliusong.spring.aop.xml;

import java.util.Arrays;

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.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;

public class LoggingAspect {
	public void beforeMethod(JoinPoint joinPoint) {
		String methodName = joinPoint.getSignature().getName();
		Object[] args = joinPoint.getArgs();
		System.out.println("方法开始——————" + methodName + Arrays.asList(args));
	}

	public void afterMethod(JoinPoint joinPoint) {
		String methodName = joinPoint.getSignature().getName();
		Object[] args = joinPoint.getArgs();
		System.out.println("方法结束——————" + methodName + Arrays.asList(args));
	}

	public void afterRunning(JoinPoint joinPoint, Object result) {
		String methodName = joinPoint.getSignature().getName();
		Object[] args = joinPoint.getArgs();
		System.out.println("方法结束——————" + methodName + Arrays.asList(args)
				+ result);
	}

	public void afterThrowing(JoinPoint joinPoint, Exception ex) {
		String methodName = joinPoint.getSignature().getName();
		Object[] args = joinPoint.getArgs();
		System.out
				.println("方法结束——————" + methodName + Arrays.asList(args) + ex);
	}

	public Object aroundMethod(ProceedingJoinPoint point) {
		Object result = null;
		String methodName = point.getSignature().getName();
		// 执行目标方法
		try {
			// 前置通知
			System.out.println("aroundMethod-" + methodName + "-begin with "
					+ Arrays.asList(point.getArgs()));
			result = point.proceed();
			// 后置通知
			System.out.println("aroundMethod-" + methodName + " -end with "
					+ Arrays.asList(point.getArgs()));

		} catch (Throwable e) {
			// 异常通知
			System.err.println(e);
			e.printStackTrace();
		}
		return result;
	}
}


4。TestAop.java

package com.huangliusong.spring.aop.xml;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class TestAop {
	@Test
	public void test1() {
		ApplicationContext ctx = new ClassPathXmlApplicationContext(
				"applicationContext_xml.xml");
		ArithmeticCalculator arithmeticCalculator = (ArithmeticCalculator) ctx
				.getBean("arithmeticCalculator");
		System.err.println(arithmeticCalculator.getClass().getName());
		int result = arithmeticCalculator.add(11, 11);
		System.out.println("结果" + result);
		result = arithmeticCalculator.div(12, 10);
		System.out.println("结果" + result);
	}
}


5。VlitationAspect.java

package com.huangliusong.spring.aop.xml;

import java.util.Arrays;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.core.annotation.Order;
import org.springframework.stereotype.Component;
/**
 * 验证通知 可以指定切面的优先级
 * 优先级使用Order(1)值越小优先级越高
 * @author Administrator
 *
 */
public class VlitationAspect {
	public void validateArgs(JoinPoint joinPoint){
		System.err.println("validateArgs"+Arrays.asList(joinPoint.getArgs()));
	}
}

applicationContext_xml.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/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
	<!-- 配置bean -->
	<bean id="arithmeticCalculator" class="com.huangliusong.spring.aop.xml.ArithmeticCalculatorImpl"></bean>
	
	<!-- 配置切面的bean -->
	<bean id="loggingAspect" class="com.huangliusong.spring.aop.xml.LoggingAspect"></bean>
	
	<bean id="vlidationAspect" class="com.huangliusong.spring.aop.xml.VlitationAspect"></bean>
	<!-- 配置AOP -->
	<aop:config>
		<!-- 配置切点表达式 -->
		<aop:pointcut expression="execution(public  * com.huangliusong.spring.aop.xml.*.*(..))" id="pointcut"/>
		<!-- 配置切面以及通知 -->
		<aop:aspect ref="loggingAspect"  order="2">
			<aop:before method="beforeMethod" pointcut-ref="pointcut"/>
			<aop:after method="afterMethod" pointcut-ref="pointcut"/>
		</aop:aspect>
		<aop:aspect ref="vlidationAspect" order="1">
			<aop:before method="validateArgs" pointcut-ref="pointcut"/>
		</aop:aspect>
	</aop:config>
</beans>

 

 

运行:

© 著作权归作者所有

黄柳淞
粉丝 2
博文 108
码字总数 54251
作品 0
南宁
程序员
私信 提问
Spring中的AOP(七)——基于XML配置文件方式的AOP

除了前面介绍的基于JDK1.5的注解方式来定义切面,切入点和增强处理外,Spring AOP也允许直接使用XML配置文件来管理它们。在JDK1.5之前,只能使用配置文件的方式来管理,在Spring2.X后提供了一...

摆渡者
2014/03/24
0
0
《Spring5学习》04 - 面向切面编程

一、Spring面向切面编程的基本概念 面向切面编程(即AOP):把项目中需要再多处使用的功能比如日志、安全和事务等集中到一个类中处理,而不用在每个需要用到该功能的地方显式调用。 横切关注...

老韭菜
2018/08/19
0
0
一个常见的Spring IOC疑难症状

Case 请看下面的IOC实例: 1)AaaService实现AaaaInterface接口 2)在BaaService中Autowired AaaService Code Java代码 //1.AaaInterface package com.test; public interface AaaInterface......

stamen
2015/08/21
0
0
Spring 面试问题 TOP 50

Spring 面试问题 TOP 50 Spring Framework 现在几乎已成为 Java Web 开发的标配框架。那么,作为 Java 程序员,你对 Spring 的主要技术点又掌握了多少呢?不妨用本文的问题来检测一下。 本文...

静默虚空
2018/08/02
0
0
说说在 Spring 中如何基于 Java 类进行配置

JavaConfig 原来是 Spring 的一个子项目,它通过 Java 类的方式提供 Bean 的定义信息,在 Spring4 的版本, JavaConfig 已正式成为 Spring4 的核心功能 。 1 定义 Bean 普通的 POJO 只要标注...

deniro
2018/05/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

聊聊Elasticsearch的CircuitBreakerService

序 本文主要研究一下Elasticsearch的CircuitBreakerService CircuitBreakerService elasticsearch-7.0.1/server/src/main/java/org/elasticsearch/indices/breaker/CircuitBreakerService.ja......

go4it
10分钟前
1
0
Spring系列教程六:AOP详细讲解

AOP 概述 什么是 AOP AOP:全称是 Aspect Oriented Programming 即:面向切面编程。 AOP技术是对OOP技术的一种延伸,AOP是面向纵向,OOP是面向横向。简单的说它就是把我们程序重复的代码抽取...

我叫小糖主
23分钟前
9
0
Qt编写数据可视化大屏界面电子看板9-曲线效果

一、前言 为了编写数据可视化大屏界面电子看板系统,为了能够兼容Qt4和嵌入式linux系统,尤其是那种主频很低的,但是老板又需要在这种硬件上(比如树莓派、香橙派、全志H3、imx6)展示这么华...

飞扬青云
44分钟前
3
0
责任链模式

//这篇博客的博主真的不错,解析的都很清晰明了, https://blog.csdn.net/jason0539/article/details/45091639

南桥北木
今天
3
0
Flutter -------- dio网络请求

dio是Flutter中文网开源的一个强大的Dart Http请求库,支持Restful API、FormData、拦截器、请求取消、Cookie管理、文件上传/下载、超时等... 1.添加依赖# dependencies: dio: 2.1.x #...

切切歆语
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部