一、前置增强

二、后置增强

三、环绕增强

   环绕增强相当于前置增强和后置增强的结合体,可以使用<aop:around>进行处理,这里我采用代理工厂的方式

  1.接口及其实现类

public interface ProService {
public void doSome();
}
public class ProServiceImpl implements ProService {
@Override
public void doSome() {
System.out.println("123");
}
}

  2.增强类

public class around implements MethodInterceptor {
@Override
public Object invoke(MethodInvocation methodInvocation) throws Throwable {
System.out.println("before");
Object proceed = methodInvocation.proceed();
System.out.println("after");
return proceed;
} }

  3.配置文件

    <!--注入bean-->
<bean id="proService" class="cn.spring.around.ProServiceImpl"></bean>
<!--切面-->
<bean id="aroundAdvice" class="cn.spring.around.around"></bean>
<!--代理工厂实现增强-->
<bean id="ProFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
<!--将增强和业务织入到一起-->
<property name="target" ref="proService"></property>
<!--拦截增强类-->
<property name="interceptorNames" value="aroundAdvice"></property>
<!--更换代理方式 默认值为false jdk动态代理,当没有接口时,自动改成cglib-->
<property name="proxyTargetClass" value="true"></property>
</bean>

    或者使用aop:config

<!--将目标对象声明到Spring容器中-->
<bean id="doSomeService" class="com.cmy.service.impl.DoSomeServiceImpl"></bean>
<!-- 声明增强方法所在的Bean -->
<bean id="advice" class="com.cmy.around.AroundLogger"></bean>
<!-- 配置切面 -->
<aop:config>
<aop:aspect ref="advice">
<aop:around method="aroundLogger" pointcut="execution(* com.cmy.*.*.*(..))"/>
</aop:aspect>
</aop:config>

四、异常增强

  异常增强处理,在目标方法抛出异常后织入;使用<aop:after-throwing>处理,这里我依旧采用代理工厂的方法

  1.接口及其实现类

public interface IdoSomeService {
public void doSome() throws Exception;
}
/**
* 原始对象
*/
public class IdoSomeServiceImpl implements IdoSomeService {
public void doSome() throws Exception{
int result=5/0;
System.out.println("=========真实业务===========");
}
}

  2.增强类

package cn.spring.throwadvice;

import org.springframework.aop.AfterAdvice;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.ThrowsAdvice; import java.lang.reflect.Method; public class MyAdvice {
public void afterThrowing(Exception ex){
System.out.println("=====发生了异常,执行增强操作===============");
} }

  3.配置文件

<bean id="proxyFactory" class="org.springframework.aop.framework.ProxyFactoryBean">
<!-- 将增强和业务织入到一起-->
<property name="target" ref="idoSomeService"></property>
<!--拦截增强类;-->
<property name="interceptorNames" value="myThrowAdvice"></property>
<!-- 更换代理方式 proxyTargetClass默认值为false 默认是jdk动态代理,但是当目标对象没有接口时,自动改为cglib -->
<property name="proxyTargetClass" value="true"></property>
</bean>

    或者采用aop:after-throwing

<aop:config>
<aop:pointcut id="pointcut" expression="execution(* *..throwadvice.*.*(..))"/>
<aop:aspect ref="myAdvice">
<aop:after-throwing method="afterThrowing" throwing="ex" pointcut-ref="pointcut"></aop:after-throwing> </aop:config>

五、最终增强

  无论方法是否抛出异常,都会在目标方法后做织入的增强处理,即该增强一定会执行,有点类似try-catch-finally块中的finally,一般用于释放资源。 使用<aop:after>处理最终增强。这里依旧运用代理工厂实现

  1.增强类

 public void afterAdvice(){
System.out.println("======执行最终异常===============");
}

  2.配置文件

<aop:config>
<aop:pointcut id="pointcut" expression="execution(* *..throwadvice.*.*(..))"/>
<aop:aspect ref="myAdvice">
<aop:after method="afterAdvice" pointcut-ref="pointcut"></aop:after>
</aop:aspect>
</aop:config>

  

  

最新文章

  1. tab
  2. LruCache为GridView异步加载大量网络图片
  3. vs2010 创建预编译头 Debug 正常 Release Link Error问题解决
  4. Strobogrammatic Number
  5. .gitignore文件不起作用
  6. c#游戏 剪刀石头
  7. LinkedList的实现原理
  8. 【转载】.NET面试题系列[0] - 写在前面
  9. Linked List Sorting (链表)
  10. 相看系统中用户的信息 passwd, shadow
  11. Div与table的区别
  12. ucfirst() strtoupper() strtolower()
  13. 关于json数据格式错误
  14. 微信小程序-表单笔记
  15. Spring扫面路径配置不全导致异常 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): 的原因
  16. nexus、maven私服仓库(一)
  17. Python3 批量替换文本内容
  18. synchronized同步方法《二》
  19. 服务器-华为RH5885 V3-安装Windows Server 2008R2后设备管理器中存在大量的感叹号,并且无法识别网络适配器,没有网卡
  20. #6【bzoj4321】queue2 dp

热门文章

  1. ubutnu18.04LTS 配置网卡新特性
  2. MySQL mysql-5.7.21-winx64.zip安装指南
  3. maven简识
  4. 豆瓣网post 爬取带验证码
  5. centos7上的firewalld 的使用
  6. js大神成长指路
  7. 5、vim编辑器
  8. XML基础介绍【二】
  9. goaccess安装和使用
  10. Android异常与性能优化相关面试问题-其他优化面试问题详解