核心配置文件配置 -->
<?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:context="http://www.springframework.org/schema/context"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.3.xsd">
<context:component-scan base-package="org.lq"></context:component-scan>
<!-- 注解支持 -->
<aop:aspectj-autoproxy/>
<!--原始对象,目标对象 -->
<bean id="userDao" class="org.lq.dao.impl.UserDaoImpl"></bean>
<!-- 声明通知 切面 -->
<bean id="loggerAop" class="org.lq.aop.LoggerAop"></bean>
<aop:config>
<!-- 声明方法的拦截 -->
<!-- 声明切入点,拦截规则 -->
<aop:pointcut expression="execution(* org.lq.dao..*.*(..))" id="pointcut"/>
<!-- 切面 -->
<aop:aspect ref="loggerAop">
<aop:around method="around" pointcut-ref="pointcut"/>
</aop:aspect>
</aop:config>
</beans>
AOP增强代码类
package org.lq.aop;
import org.aspectj.lang.ProceedingJoinPoint;
public class LoggerAop {
public Object around(ProceedingJoinPoint jp) {
Object result = null;
Object target = jp.getTarget();
try {
System.out.println("前置增强"+target.getClass().getName());
result = jp.proceed();
System.out.println("后置增强"+result);
} catch (Throwable e) {
System.out.println(jp.getSignature().getName()+"异常通知");
e.printStackTrace();
}
return result;
}
}
测试类
package org.lq.test;
import org.lq.dao.UserDao;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
UserDao bean = (UserDao) context.getBean("userDao");
bean.hello();
}
}
注解方式配置
package org.lq.aop;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class LoggerAopAnn {
@Before("execution(* org.lq.service..*.*(..))")
public void before(JoinPoint jp) {
System.out.println("前置通知啦啦啦啦");
}
@AfterReturning(pointcut = "execution(* org.lq.service..*.*(..))",returning = "returnvalue")
public void after(JoinPoint jp,Object returnvalue) {
System.out.println(jp.getTarget().getClass().getName()+"后置通知啦啦啦"+jp.getSignature().getName());
}
@Around("execution(* org.lq.service..*.*(..))")
public Object around(ProceedingJoinPoint jp) {
Object result = null;
try {
System.out.println("环绕前");
result = jp.proceed();
System.out.println("环绕后");
} catch (Throwable e1) {
System.out.println("异常");
e1.printStackTrace();
}
return result;
}
}