xml aop:config方式实现AOP(第四种)
public interface IUserService {
/**
* 获取所有的用户对象列表
* @return
*/
List
/**
* 保存用户
* @param user
* @return
*/
boolean saveUser(Object user);
/**
* 根据用户uid删除该uid对应的用户信息
* @param uid
* @return
*/
boolean deleteUser(int uid);
/**
* 更新指定用户信息
* @param obj
* @return
*/
boolean updateUser(Object obj);
}
配置beans文件
AOP的第五种实现方式-xml通知(第五种)
/**
* 五种通知方式来实现aop
* 1. 前置通知,在业务方法之前执行
* 2. 后置通知,在业务方法之后执行
* 3. 环绕通知,同时在业务方法的前后执行
* 4. 带有返回值通知,可以拿到业务方法的返回值
* 5. 异常通知,可以捕获业务方法中的异常对象
*
* 注意:如果同时配置来所有的通知方式,则执行顺序依次为:
* before>around before>业务方法 >after returning > around after > after
* before>around before>业务方法 >after throwing > after
*
* ps. 使用注解的话是环绕通知proceed方法之前部分先执行,使用xml配置的话取决于aop:before和aop:around的配置顺序
*/
public interface IUserService {
/**
* 获取所有的用户对象列表
* @return
*/
List
/**
* 保存用户
* @param user
* @return
*/
boolean saveUser(Object user);
/**
* 根据用户uid删除该uid对应的用户信息
* @param uid
* @return
*/
boolean deleteUser(int uid);
/**
* 更新指定用户信息
* @param obj
* @return
*/
boolean updateUser(Object obj);
void getUserByUid();
}
beans文件配置
AOP的第六种实现方式:自动代理 (第六种)
import java.util.List;
public interface IUserService {
/**
* 获取所有的用户对象列表
* @return
*/
List
/**
* 保存用户
* @param user
* @return
*/
boolean saveUser(Object user);
/**
* 根据用户uid删除该uid对应的用户信息
* @param uid
* @return
*/
boolean deleteUser(int uid);
/**
* 更新指定用户信息
* @param obj
* @return
*/
boolean updateUser(Object obj);
void getUserByUid();
}
/**
* 以注解的方式实现的切面类MyAspect
*
* 当前类中的五种通知方式均以注解方式完成
*/
@Component // 标注当前类为一个组件
@Aspect // 标注当前类为一个切面类
public class MyAspect {
/**
* @Pointcut 注解为了避免相同的匹配规则被定义多处,专门定义该方法设置执行的匹配规则,各个自行调用即可
* write once, only once
*/
@Pointcut(value = "execution(* com.qfedu.aop06.*.*(..))")
public void setAll(){}
/**
* @Before 表示该方法为一个前置通知
* @param jp 连接点
*/
@Before("setAll()")
public void myBefore(JoinPoint jp){
//System.out.println(jp.getArgs());
System.out.println("this is before.");
}
/**
* @After 表示该方法为一个后置通知
* @param jp 连接点
*/
@After("setAll()")
public void myAfter(JoinPoint jp){
//System.out.println(jp.getArgs());
System.out.println("this is after.");
}
/**
* @Around 表示该方法为一个环绕通知
* @param pjp 处理连接点
* @return 返回每个业务方法的返回值
*/
@Around("setAll()")
public Object myAround(ProceedingJoinPoint pjp){
Object obj = null;
try {
System.out.println("this is around before");
obj = pjp.proceed();
System.out.println("this is around after");
} catch (Throwable throwable) {
throwable.printStackTrace();
}
return obj;
}
/**
* @AfterReturning 表示该方法为一个带有返回值的通知
* @param jp 连接点
* @param obj 业务方法的返回值
*/
@AfterReturning(value = "setAll()", returning = "obj")
public void myReturn(JoinPoint jp, Object obj){
System.out.println("this is after returnning " + obj);
}
/**
* @AfterThrowing 表示该方法为一个带有异常的通知
* @param jp 连接点
* @param e Throwable对象
*/
@AfterThrowing(value = "setAll()", throwing = "e")
public void myThrowing(JoinPoint jp, Throwable e){
System.out.println("this is after throwing " + e.getMessage());
}
}
beans文件配置
使用BeanPostProcessor方式实现Spring的AOP(第七种)
public interface IUserService {
/**
* 获取所有的用户对象列表
* @return
*/
List
/**
* 保存用户
* @param user
* @return
*/
boolean saveUser(Object user);
/**
* 根据用户uid删除该uid对应的用户信息
* @param uid
* @return
*/
boolean deleteUser(int uid);
/**
* 更新指定用户信息
* @param obj
* @return
*/
boolean updateUser(Object obj);
void getUserByUid();
}
beans文件配置