本节内容结合哔哩哔哩我的讲解视频来看代码:网址为:…
一、带返回值的后置通知
二、环绕通知
(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("登录失败");
}
}
}