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来说就是入门和基础,经常会用到,所以写下做个总结以便日 ...
 
随机推荐
- bitbucket 源代码托管
			
5个人以下可以免费使用,不限制仓库的数量; 国外的注册需要开启蓝灯FQ; 1.注册账号 maanshancss w1-g1@qq.com;创建仓库; 然后拷贝现有项目 然后提交 然后push; 2.写 ...
 - Java - 避免不必要的对象
			
通常,我们更喜欢重用一个对象而不是重新创建一个.如果对象是不可变的,它就始终可以被重用. 下面是一个反面例子: String s = new String("stringette" ...
 - PHP5中Static和Const关键字
			
(1) static static要害字在类中是,描述一个成员是静态的,static能够限制外部的访问,因为static后的成员是属于类的,是不属于任何对象实例,其他类是无法访问的,只对类的实例共享, ...
 - ccf-201709-2  公共钥匙盒
			
问题描述 有一个学校的老师共用N个教室,按照规定,所有的钥匙都必须放在公共钥匙盒里,老师不能带钥匙回家.每次老师上课前,都从公共钥匙盒里找到自己上课的教室的钥匙去开门,上完课后,再将钥匙放回到钥匙盒中 ...
 - HTML总结摘要
			
一 概述 1.什么是HTML? HyperText Markup Language,超文本标记语言,客户端技术的技术,负责页面展示. 2.HTML的特点 标签不区分大小写. 3.请求地址 HTML是客 ...
 - Codeforces Round #411 B. 3-palindrome
			
B. 3-palindrome time limit per test 1 second memory limit per test 256 megabytes In the beginning ...
 - win10 x64 python3.6 pycharm 安装statsmodels
			
在pycharm下,安装statsmodels,会出现需要vc++14.0的错误提示. 这时可以到网站 https://www.lfd.uci.edu/~gohlke/pythonlibs/#word ...
 - CSS布局之传统方法
			
传统的页面布局依赖于盒模型+流动模型(flow)+浮动模型(float)+层模型(layer)来实现页面的布局,具体方法是通过盒模型+display属性+float属性+position属性来加以实现 ...
 - Android学习——Service(一)
			
这篇博文来介绍Android另一个十分重要的组件,Service.Service和Activity很类似,区别在于它运行在后台,不可见且没有界面.Service的优先级高于Activity,当系统负载 ...
 - linux 软连接和硬链接示意图
			
创建软连接 ln -s 1.txt 1-softlink.txt 创建硬链接 ln 1.txt 1-hardlink.txt