一、接口切入方式

实现类

package com.pb.entity;
/**
* 实体类
*/
public class Hello {
private String name;
private String password; public void show(){
System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword());
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

1.1、前置增强

package com.pb.aop;

import java.lang.reflect.Method;

import org.springframework.aop.MethodBeforeAdvice;
/**
* 前置增强的Bean
* @author Administrator
*实现MethodBeforeAdvice接口
*/
public class BeforeAdded implements MethodBeforeAdvice { @Override
public void before(Method arg0, Object[] arg1, Object arg2)
throws Throwable {
System.out.println("====前置增强!====="); } }

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!--hello Bean -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="123qwe"/>
<!--切入的Bean -->
<bean id="beforeAdd" class="com.pb.aop.BeforeAdded"/>
<!--前置增强切入的Bean -->
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/>
<!-- 关联切入类和切入点 -->
<aop:advisor advice-ref="beforeAdd" pointcut-ref="myPoint"/>
</aop:config>
</beans>

1.2、后置增强

package com.pb.aop;

import java.lang.reflect.Method;

import org.springframework.aop.AfterReturningAdvice;
/**
* 后置增强
*/
public class AfterAdded implements AfterReturningAdvice { @Override
public void afterReturning(Object arg0, Method arg1, Object[] arg2,
Object arg3) throws Throwable {
System.out.println("====这里是后置增强!===="); } }

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!--hello Bean -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="123qwe"/>
<!--切入的Bean --> <!--后置增强切入的Bean -->
<bean id="afterAdd" class="com.pb.aop.AfterAdded"/>
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/>
<!-- 关联后置增强切入类和切入点 -->
<aop:advisor advice-ref="afterAdd" pointcut-ref="myPoint"/>
</aop:config>
<!--后置增强切入的Bean --> </beans>

1.3、异常增强

实体类中增加异常

package com.pb.entity;
/**
* 实体类
*/
public class Hello {
private String name;
private String password; public void show(){
System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword());
//加入异常
System.out.println(1/0);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }
package com.pb.aop;

import java.lang.reflect.Method;

import org.springframework.aop.ThrowsAdvice;
/**
* 异常增强类
* @author Administrator
*
*/
public class ThrowingAdded implements ThrowsAdvice {
//第一种写法
public void afterThrowing(Exception ex){
System.out.println("我是异常增强!,,没处理异常,有问题就找我"); }
//第二种写法
public void afterThrowing(Method arg0, Object[] arg1, Object arg2,Exception ex){
System.out.println("我是异常增强!,,没处理异常,有问题就找我"); } }

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!--hello Bean -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="123qwe"/>
<!--切入的Bean --> <!--异常增强切入的Bean -->
<bean id="throwAdd" class="com.pb.aop.ThrowingAdded"/>
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/>
<!-- 关联异常增强切入类和切入点 -->
<aop:advisor advice-ref="throwAdd" pointcut-ref="myPoint"/>
</aop:config> </beans>

1.4、以上综合

<?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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!--hello Bean -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="123qwe"/>
<!--切入的Bean -->
<!--前置增强切入的Bean -->
<bean id="beforeAdd" class="com.pb.aop.BeforeAdded"/> <!--后置增强切入的Bean -->
<bean id="afterAdd" class="com.pb.aop.AfterAdded"/>
<!--异常增强切入的Bean -->
<bean id="throwAdd" class="com.pb.aop.ThrowingAdded"/>
<aop:config>
<!-- 切入点 -->
<aop:pointcut expression="execution(* com.pb.entity.Hello.*(..))" id="myPoint"/>
<!-- 关联前置增强切入类和切入点 -->
<aop:advisor advice-ref="beforeAdd" pointcut-ref="myPoint"/>
<!-- 关联后置增强切入类和切入点 -->
<aop:advisor advice-ref="afterAdd" pointcut-ref="myPoint"/>
<!-- 关联异常增强切入类和切入点 -->
<aop:advisor advice-ref="throwAdd" pointcut-ref="myPoint"/>
</aop:config> </beans>

1.5、环绕增强

package com.pb.entity;
/**
* 实体类
*/
public class Hello {
private String name;
private String password; public void show(){
System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword());
//加入异常
System.out.println(1/0);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

环绕增加Bean

package com.pb.aop;

import org.aopalliance.intercept.MethodInterceptor;
import org.aopalliance.intercept.MethodInvocation;
/**
* 环绕增强
* @author Administrator
*实现接口MethodIntercepor
*/
public class AroundAdded implements MethodInterceptor { @Override
public Object invoke(MethodInvocation arg0) throws Throwable {
Object result=null;
try {
System.out.println("环绕增强开始!");
result=arg0.proceed();
System.out.println("环绕增强结束!");
} catch (Exception e) {
System.out.println("环绕增强异常!");
}finally{
System.out.println("环绕增强最终增强!");
} return result;
} }

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!-- 关联Bean Hello -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="qewr"/>
<!--环绕增强的Bean -->
<bean id="aroundAdded" class="com.pb.aop.AroundAdded"></bean> <aop:config>
<!-- 切入点-->
<aop:pointcut expression="execution(* com.pb.entity.*.*(..))" id="myPoint"/>
<!--关联切入点 -->
<aop:advisor advice-ref="aroundAdded" pointcut-ref="myPoint"/>
</aop:config>
</beans>

二、注解方式

package com.pb.entity;
/**
* 实体类
*/
public class Hello {
private String name;
private String password; public void show(){
System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword());
//加入异常
System.out.println(1/0);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

aop的类

package com.pb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
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; /**
* 注解的方式现实AOP
* @author Administrator
*
*/
@Aspect
public class MyAnnotionAOP { /*
* 前置
*/
@Before(value="execution(* com.pb.entity.*.*(..))")
public void before(JoinPoint point){ System.out.println("前置增强");
System.out.println(point.getClass());
}
/*
* 后置
*/
@AfterReturning(value="execution(* com.pb.entity.*.*(..))")
public void after(JoinPoint point){
System.out.println("后置增强");
//参数个数
System.out.println(point.getArgs().length);
}
/*
*异常
*/
@AfterThrowing(value="execution(* com.pb.entity.*.*(..))")
public void afterThrowing(JoinPoint point){
System.out.println("我是异常增强");
System.out.println(point.getSignature().getName());
}
/**
* 环绕
*/
@Around(value="execution(* com.pb.entity.*.*(..))")
public Object myAround(ProceedingJoinPoint point){
Object result=null; try {
System.out.println("环绕增强开始了");
System.out.println(point.getKind()+point.getArgs());
point.proceed();
System.out.println("环绕增强后置增强了");
System.out.println(point.getTarget()+""+point.getClass());
} catch (Throwable e) {
System.out.println("环绕增强,异常增强处理");
e.printStackTrace();
}finally{
System.out.println("环绕增强最终增强");
} return result; }
}

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!-- 关联Bean Hello -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="qewr"/>
<!-- 切入 类 -->
<bean id="myAnnAOP" class="com.pb.aop.MyAnnotionAOP" />
<!--开启自动代理 -->
<aop:aspectj-autoproxy/> </beans>

三、Schema方式(推荐)

Hello类同上

package com.pb.entity;
/**
* 实体类
*/
public class Hello {
private String name;
private String password; public void show(){
System.out.println("姓名 :"+this.getName()+"密码: "+this.getPassword());
//加入异常
System.out.println(1/0);
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public String getPassword() {
return password;
} public void setPassword(String password) {
this.password = password;
} }

aop类

package com.pb.aop;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint; /**
* SCHEMA方式切入类
*
* @author Administrator
*
*/
public class MySchemaAOP { /**
* 前置切入 可以有参数但是固定写法
*/
public void before(JoinPoint point){
System.out.println("这里是前置增强切入");
System.out.println(point.getKind()+point.getArgs().toString());
}
/**
* 后置切入
*/
public void after(JoinPoint point){
System.out.println("这里是后置增强切入");
System.out.println(point.getTarget()+point.getSignature().getName());
}
/**
* 异常切入
*/
public void myException(JoinPoint point){
System.out.println("这里是异常增强切入");
System.out.println(point.getSourceLocation());
}
/**
* 环绕增强切入
*/
public Object myAround(ProceedingJoinPoint point){
Object resut=null;
try {
System.out.println("环绕增强---前置增强");
resut=point.proceed();
System.out.println("环绕增强---后置增强");
} catch (Throwable e) {
System.out.println("环绕增强---异常增强");
e.printStackTrace();
}finally{
System.out.println("环绕增强---最终增强");
}
return resut;
}
}

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:p="http://www.springframework.org/schema/p"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.1.xsd">
<!-- 关联Bean Hello -->
<bean id="hello" class="com.pb.entity.Hello" p:name="张三" p:password="qewr"/>
<!-- 切入 类 -->
<bean id="mySchemaAOP" class="com.pb.aop.MySchemaAOP"/> <aop:config>
<!-- 切入点-->
<aop:pointcut expression="execution(* com.pb.entity.*.*(..))" id="myPoint"/>
<!--关联切入类、方法和切入点 -->
<aop:aspect ref="mySchemaAOP">
<!-- 切入 前置方法和切入点-->
<aop:before method="before" pointcut-ref="myPoint"/>
<!-- 切入 后置方法和切入点-->
<aop:after method="after" pointcut-ref="myPoint"/>
<!-- 切入 异常方法和切入点-->
<aop:after method="myException" pointcut-ref="myPoint"/>
<!-- 切入 环绕增加方法和切入点-->
<aop:around method="myAround" pointcut-ref="myPoint"/>
</aop:aspect>
</aop:config>
</beans>

Spring(六)AOP切入方式的更多相关文章

  1. 【Spring】AOP注解方式实现机制

    一.概述 二.@EnableAspectJAutoProxy 注解分析 三.分析AnnotationAwareAspectJAutoProxyCreator 四.执行流程 1. registerBea ...

  2. 【Spring】 AOP Base

    1. AOP概述 2. AOP的术语: 3. AOP底层原理 4. Spring 中的AOP 4.1 概述 4.2 分类 4.3 Spring的传统AOP 针对所有方法的增强:(不带有切点的切面) 带 ...

  3. Spring实现AOP的多种方式

    转载自:https://www.cnblogs.com/best/p/5736422.html:加了一些自己的注释: AOP(Aspect Oriented Programming)面向切面编程,通过 ...

  4. Spring之AOP原理、代码、使用详解(XML配置方式)

    Spring 的两大核心,一是IOC,另一个是AOP,本博客从原理.AOP代码以及AOP使用三个方向来讲AOP.先给出一张AOP相关的结构图,可以放大查看. 一.Spring AOP 接口设计 1.P ...

  5. 【学习】Spring 的 AOP :基于Annotation 的“零配置”方式

    转自:http://www.cnblogs.com/jbelial/archive/2012/07/20/2539123.html AOP(Aspect Orient Programming ) , ...

  6. spring(六):spring中AOP的基本使用

    AOP:面向切面编程[底层使用动态代理实现],就是在运行期间动态的将某段代码切入到方法的指定位置进行运行的编程方式 基本使用 使用AOP功能需要引入spring的aop以及aspects相关包 < ...

  7. Spring系列之aAOP AOP是什么?+xml方式实现aop+注解方式实现aop

    Spring系列之aop aop是什么?+xml方式实现aop+注解方式实现aop 什么是AOP? AOP为Aspect Oriented Programming 的缩写,意识为面向切面的编程,是通过 ...

  8. Spring实现AOP的4种方式

    了解AOP的相关术语:1.通知(Advice):通知定义了切面是什么以及何时使用.描述了切面要完成的工作和何时需要执行这个工作.2.连接点(Joinpoint):程序能够应用通知的一个“时机”,这些“ ...

  9. (转)Spring AOP实现方式(转)

    我们可以通过三种方式来使用Spring AOP,它们分别是:@Aspect-based(Annotation),Schema-based(XML),以及底层的Spring AOP API 底层的Spr ...

随机推荐

  1. 代码演示用 KnockoutJS 和 Web API 对一个表格(Gird)进行 CRUD 操作,在 MVC 5 下

    实体类: using System; using System.Collections.Generic; public partial class EmployeeInfo { public int ...

  2. ruby -- 进阶学习(九)定制错误跳转404和500

    在开发阶段,如果发生错误时,都会出现错误提示页面,比如:RecordNotFound之类的,虽然这些错误方便开发进行debug,但是等产品上线时,如果还是出现这些页面,对于用户来说是很不友好的. 所以 ...

  3. nodejs+express中设置登录拦截器

    在nodejs+express中,采用nodejs后端路由控制用户登录后,为了加强前端的安全性控制,阻止用户通过在浏览器地址栏中输入地址访问后台接口,在app.js中需要加入拦截器进行拦截: /*** ...

  4. bootstrap插件学习-bootstrap.typehead.js

    先看bootstrap.typehead.js的结构 var Typeahead = function ( element, options ){} //构造器 Typeahead.prototype ...

  5. [转载]部署Office Web Apps Server并配置其与SharePoint 2013的集成

    Office Web Apps Server 是新的 Office 服务器产品,它提供 Word.PowerPoint.Excel 和 OneNote 的基于浏览器的版本.单个 Office Web ...

  6. iOS-微信支付(订单号重复的问题)

    1. 官方文档中说过同一笔交易不能多次提交,出现这个错误让核实商户订单号是否重复提交,但是有些情况下是需要重复提交的,比如:用户微信支付的时候没有付款,直接取消了,那么订单如果已经创建了,在订单中心就 ...

  7. 鼠标经过(hover)事件的延时处理

    关于鼠标hover事件及延时 鼠标经过事件为web页面上最常见的事件之一.简单的hover可以用CSS :hover伪类实现,复杂点的用js. 一般情况下,我们是不对鼠标hover事件进行延时处理.但 ...

  8. 邮箱mail 发送类 ASP.NET C#

    没有牛B的设计模式,代码精练精练实用,功能齐全,调用简单 ..全全完完为码农考虑 MailSmtp ms = new MailSmtp("smtp.qq.com","12 ...

  9. 浅谈DOM性能考虑

    浅谈DOM性能考虑 很多人都会忽视脚本对Web应用整体性能的影响.为保证应用的流畅运行,在为文档编写和应用脚本时,需要注意一些问题.一.尽量减少访问DOM和尽量减少标记    访问DOM的方式对脚本性 ...

  10. CentOS6.5菜鸟之旅:文件权限详解

    一.前言 Linux下所有资源.设备均被视作文件来操作,而文件权限则是决定用户可各文件操作的范围,无论是平时使用Linux,还是写程序均涉及这方面.以下为个人学习的整理,供以后查阅. 二. 三种权限 ...