7.spring:SpringAOP(配置文件)
SpringAOP(xml文件配置)
配置文件的方式,主要是在xml文件中进行配置,不使用注解!
目录:

AtithmeticCalculator.java
public interface AtithmeticCalculator {
int add(int i,int j);
int sub(int i,int j);
int mul(int i,int j);
int div(int i,int j);
}
AtithmeticCalculatorImp1.java
@Component
public class AtithmeticCalculatorImp1 implements AtithmeticCalculator{
public int add(int i, int j) {
int res = i + j;
return res;
}
public int sub(int i, int j) {
int res = i - j;
return res;
}
public int mul(int i, int j) {
int res = i * j;
return res;
}
public int div(int i, int j) {
int res = i / j;
return res;
}
}
LoggionAspect.java
public class LoggionAspect {
public void beforeMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
Object [] args = joinPoint.getArgs();
System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
}
public void afterMethod(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " ends");
}
public void afterReturning(JoinPoint joinPoint, Object result){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " ends with " + result);
}
public void afterThrowing(JoinPoint joinPoint, Exception e){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " occurs excetion:" + e);
}
}
LoggionAspect2.java
public class LoggionAspect2 {
public void beforeMethod1(JoinPoint joinPoint){
System.out.println("--->beforeMethod1");
String methodName = joinPoint.getSignature().getName();
Object [] args = joinPoint.getArgs();
System.out.println("The method " + methodName + " begins with " + Arrays.asList(args));
System.out.println("--->beforeMethod1");
}
public void afterMethod1(JoinPoint joinPoint){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " ends");
}
public void afterReturning1(JoinPoint joinPoint, Object result){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " ends with " + result);
}
public void afterThrowing1(JoinPoint joinPoint, Exception e){
String methodName = joinPoint.getSignature().getName();
System.out.println("The method " + methodName + " occurs excetion:" + e);
}
applicationContext.xml
<!-- 配置bean -->
<bean id="atithmeticCalculator" class="com.MrChengsc.AOP.xml.AtithmeticCalculatorImp1"></bean> <!-- 配置切面的Bean -->
<bean id="loggionAspect" class="com.MrChengsc.AOP.xml.LoggionAspect"></bean>
<bean id="loggionAspect2" class="com.MrChengsc.AOP.xml.LoggionAspect2"></bean> <!-- 配置AOP -->
<aop:config>
<!-- 配置切点 表达式-->
<aop:pointcut expression="execution(* com.MrChengsc.AOP.xml.AtithmeticCalculator.*(int, int))" id="pointcut"/> <!-- 配置切面及通知 -->
<aop:aspect ref="loggionAspect2" order="">
<aop:before method="beforeMethod1" pointcut-ref="pointcut"/>
</aop:aspect>
<aop:aspect ref="loggionAspect" order="">
<aop:before method="beforeMethod" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
main
public static void main(String[] args) {
// AtithmeticCalculator atithmeticCalculator = null;
// atithmeticCalculator = new AtithmeticCalculatorImp();
//
// atithmeticCalculator.add(1, 3);
// System.out.println("---");
// atithmeticCalculator.sub(3, 1);
// System.out.println("---");
// atithmeticCalculator.mul(1, 3);
// System.out.println("---");
// atithmeticCalculator.div(10, 2);
// System.out.println("---");
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
//强制的类型使用接口的类型
AtithmeticCalculator atithmeticCalculator = (AtithmeticCalculator) ctx.getBean(AtithmeticCalculator.class);
int res = atithmeticCalculator.add(, );
System.out.println("res:" + res);
System.out.println("-----");
// int res1 = atithmeticCalculator.mul(2, 3);
// System.out.println("res1:" + res1);
//异常代码的测试
// int res2 = atithmeticCalculator.div(10, 0);
// System.out.println("res2:" + res2);
}
The method add begins with [, ]
--->beforeMethod1
The method add begins with [, ]
--->beforeMethod1
res:
-----
注:
1.配置bean,实现aop的类
2.配置切面的bean
3.配置aop需要使用<aop:config>标签
4.使用<aop:pointcut expression="execution(* com.MrChengsc.AOP.xml.AtithmeticCalculator.*(int, int))" id="pointcut"/>
配置切点表达式
*:代表任意的
两个int:可以使用 .. 进行替换
5.配置切面以及通知使用<aop:aspect>
ref:引用已配置的切面类bean
order:切面的优先级(数值越小优先级越大)
6.标签:
<aop:before method="beforeMethod" pointcut-ref="pointcut"/> :前置通知
<aop:after method=""/>:后置通知
<aop:after-returning method="" returning="" pointcut="">:执行成功拿返回值
<aop:around method=""/>:环绕通知
<aop:after-throwing method="" >:异常通知
属性:
pointcut-ref:引用切点表达式
method:切面类中的方法
returning:接受返回值
pointcut:切点表达式
7.spring:SpringAOP(配置文件)的更多相关文章
- spring*.xml配置文件明文加密
spring*.xml配置文件明文加密 说明:客户要求spring*.xml中Oracle/Redis/MongoDB的IP.端口.用户名.密码不能明文存放,接到需求的我,很无奈,但是还是的硬着头皮搞 ...
- Spring的配置文件 (SSM maven项目)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.sp ...
- Spring的配置文件
Web.xml将会配置Spring的配置文件位置: <servlet> <servlet-name>x</servlet-name> & ...
- java Spring使用配置文件读取jdbc.properties
Spring使用配置文件读取jdbc.properties 在beans.xml中加入两个必须的bean [html]<bean id="propertyConfigurer" ...
- 使用JDom解析XML文档模拟Spring的配置文件解析
在J2EE项目中可能会涉及到一些框架的使用,最近接触到了SSH,拿Spring来说配置文件的使用是相当重要的,Spring的配置文件是一个xml文件,Spring是如何读取到配置文件并进行依赖注入的呢 ...
- Spring Boot 配置文件详解
Spring Boot配置文件详解 Spring Boot提供了两种常用的配置文件,分别是properties文件和yml文件.他们的作用都是修改Spring Boot自动配置的默认值.相对于prop ...
- Spring boot 配置文件详解 (properties 和yml )
从其他框架来看 我们都有自己的配置文件, hibernate有hbm,mybatis 有properties, 同样, Spring boot 也有全局配置文件. Springboot使用一个全局的配 ...
- Springboot 系列(二)Spring Boot 配置文件
注意:本 Spring Boot 系列文章基于 Spring Boot 版本 v2.1.1.RELEASE 进行学习分析,版本不同可能会有细微差别. 前言 不管是通过官方提供的方式获取 Spring ...
- java web路径和spring读取配置文件
此篇博客缘起:部署java web系统到阿里云服务器(ubuntu14.04)的时候,有以下两个问题 找不到自定义的property配置文件 上传图片的时候找不到路径 开发的时候是在windows上的 ...
- 史上最全的Spring Boot配置文件详解
Spring Boot在工作中是用到的越来越广泛了,简单方便,有了它,效率提高不知道多少倍.Spring Boot配置文件对Spring Boot来说就是入门和基础,经常会用到,所以写下做个总结以便日 ...
随机推荐
- [转]Entity Framework Refresh context?
本文转自:http://stackoverflow.com/questions/20270599/entity-framework-refresh-context If you want to rel ...
- PHP学习7——文件系统
主要内容: 打开和关闭文件 文件类型 文件处理 目录处理 访问远程文件 文件锁定 文件上传 数据除了可以存储在数据库中,我们主要的还是存储在文件中,而且存储在文件中更加的方便直接. 打开和关闭文件 打 ...
- [转]ubuntu 13.04 体验wine qq
1.首先安装最新版的wine1.52,没记错版本号应该是这个 sudo add-apt-repository ppa:ubuntu-wine/ppa sudo apt-get update sudo ...
- OkHttp完全解析之整体调用流程
前言:阅读好的代码如同观赏美景一样的美妙 OkHttp是一个Square公司在github开源的Java网络请求框架,非常流行.OkHttp 的代码并不是特别庞大,代码很多巧妙的实现,非常值得学习. ...
- 无法解析 id,或者它不是字段
解决方法:首先,看下R文件,有没有你上面的ID.没有的话,点项目-clean . 有的话,估计你是导了android里面的那个R包了,你看看你导的包有木有 “import android.R”有的话去 ...
- thinkphp的删除操作
1.循环遍历要删除的用户的或者呀删除的文章的id值: <volist name="list" id="vo"> <tr id="si ...
- JS Event 鼠标拖拽事件
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> ...
- CentOS下调整home和根分区大小
由于我们有时候没法预估或者说错误的盘符分区的时候,常常会导致我们后面的操作出现极大的不方便,这里我就记录下一个错误分区后对home和根分区存储空间大小调整的整个过程! ①查看我们现有机器的分区状况 c ...
- servlet中cookie和session操作
1.1 软件中的会话 一次会话: 打开浏览器 -> 访问一些服务器内容 -> 关闭浏览器 登录场景: 打开浏览器 -> 浏览到登陆页面 -> 输入用户名和密码 -> 访问 ...
- RocketMQ读书笔记2——生产者
[生产者的不同写入策略] 生产者向消息队列里写入数据,不同的业务需要生产者采用不同的写入策略: 同步发送.异步发送.延迟发送.发送事务消息等. [DefaultMQProduce示例] public ...