Spring之aop——带返回值的后置通知和环绕通知

本节内容结合哔哩哔哩我的讲解视频来看代码:网址为:…
一、带返回值的后置通知

在这里插入图片描述
二、环绕通知
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(1)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:aop="http://www.springframework.org/schema/aop"
	   xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">

   <!-- 将三个切面交给spring容器来创建对象 -->
   <bean id="Security" class="cn.java.dao.impl.Security"></bean>
   <bean id="appLog" class="cn.java.dao.impl.AppLog"></bean>
   <bean id="clearResource" class="cn.java.dao.impl.ClearResource"></bean>
   <bean id="login" class="cn.java.dao.impl.Login"></bean>

   <!-- 将核心类的对象创建过程交给spring容器 -->
   <bean id="appDaoImpl" class="cn.java.dao.impl.AppDaoImpl"></bean>

   <!-- 配置aop -->
   <aop:config>
       <!-- 配置切入点 -->
       <aop:pointcut expression="execution (* cn.java.dao.impl.AppDaoImpl.* (..))" id="dian"/>
       <!-- 配置切面与通知 -->
       <aop:aspect ref="Security">
          <aop:before method="isSecurity" pointcut-ref="dian"/>
       </aop:aspect>  
       
       <!-- 配置环绕通知 -->
       <aop:aspect ref="login">
           <aop:around method="isLogin" pointcut-ref="dian"/>
       </aop:aspect>
       
       <aop:aspect ref="clearResource" >
          <aop:after method="clean" pointcut-ref="dian"/>
       </aop:aspect>
       
       <aop:aspect ref="appLog" >
          <aop:after method="log" pointcut-ref="dian"/>
       </aop:aspect>
       
       <!-- 带返回值的后置通知 -->
       <aop:aspect ref="clearResource" >
          <aop:after-returning method="recieve" pointcut-ref="dian" returning="money"/>
       </aop:aspect>
   </aop:config>
   
    
</beans>

(2) Security.java

package cn.java.dao.impl;

public class Security {
   public void isSecurity(){
	   System.out.println("Security...当前操作的环境是不安全的");
   }
}

(3) AppDaoImpl.java

package cn.java.dao.impl;

public class AppDaoImpl {
   public String zhuanMoney(){
	   System.out.println("转账成功");
	   return "成功转账";
   }
   
   public int selectMoney(){
	   System.out.println("您的余额为100万!!");
	   return 3000;
   }
   
   public float invest(){
	   System.out.println("恭喜您,您投资失败"); 
	   return 3.14F;
   }
}

(4) ClearResource.java

package cn.java.dao.impl;

public class ClearResource {
   public void clean(){
	   System.out.println("ClearResource...用户操作数据已清空");
   }
   
   public void recieve(Object money){//接收核心方法中的返回值
	   System.out.println("ClearResource" + money);
   }
}

(5)AppLog.java

package cn.java.dao.impl;
//日志
public class AppLog {
    public void log(){
    	System.out.println("AppLog...您的操作已经被记录在日志中");
    }
}

(6)Window.java

package cn.java.dao.impl;

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

public class Window {
	public static void main(String[] args){
   /*AppDaoManager adm=new AppDaoManager(new Security(), new ClearResource(), new AppLog(), new AppDaoImpl());
     adm.moneyZhuan();*/

		
	ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml");
	AppDaoImpl appDaoImpl=(AppDaoImpl) context.getBean("appDaoImpl");
	 appDaoImpl.selectMoney();
	}
}

(7 )Login.java

package cn.java.dao.impl;

import org.aspectj.lang.ProceedingJoinPoint;

public class Login {
   private String username="admin";
   private String password="123456";
   public void isLogin(ProceedingJoinPoint point) throws Throwable{
	   if("admin".equals(username)&&"123456".equals(password)){
		   System.out.println("登录成功");
		   point.proceed();
	   }else{
		   System.out.println("登录失败");
	   }
   }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值