1.写增强类,实现 AfterReturningAdvice 或者MethodBeforeAdvice接口
2.将增强类/待增强类都放入ioc中
3.配置xml文件 配置增强
4.测试,直接接收实现类,调用方法
被增强类
package com.atguigu.spring5.AOP1;
public class UserImpl implements User {
@Override
public void del() {
System.out.println("删除方法");
}
@Override
public void add() {
System.out.println("增加方法");
}
@Override
public void update() {
System.out.println("更新方法");
}
@Override
public void select() {
System.out.println("查找方法");
}
}
前置增强方法
package com.atguigu.spring5.AOP1;
import com.sun.org.apache.xpath.internal.functions.FuncSubstringAfter;
import org.springframework.aop.AfterReturningAdvice;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class Afteraop implements AfterReturningAdvice {
@Override
public void afterReturning(Object returnValue, Method method, Object[] args, Object target) throws Throwable {
System.out.println("执行了" + target.getClass().getName() +"的"+method.getName()+"方法," +"返回值:"+returnValue);
System.out.println("后置执行");
}
}
后置增强方法
package com.atguigu.spring5.AOP1;
import org.springframework.aop.MethodBeforeAdvice;
import java.lang.reflect.Method;
public class Beforeaop implements MethodBeforeAdvice {
@Override
public void before(Method method, Object[] objects, Object o) throws Throwable {
System.out.println(o.getClass().getName()+"的"+method.getName()+"方法执行了");
System.out.println("前置执行");
}
}
xml中配置增强方法 注意导入aop约束
<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.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<context:annotation-config></context:annotation-config>
<context:component-scan base-package="com"></context:component-scan>
<!-- aop1包中的类-->
<bean id="afteraop" class="com.atguigu.spring5.AOP1.Afteraop"></bean>
<bean id="UserImpl" class="com.atguigu.spring5.AOP1.UserImpl"></bean>
<bean id="beforeaop" class="com.atguigu.spring5.AOP1.Beforeaop"></bean>
<!-- 配置aop 需要导入aop的约束-->
<aop:config>
<!-- 切入点,被增强的方法 要执行的位置 -->
<aop:pointcut id="pointcut" expression="execution(* com.atguigu.spring5.AOP1.UserImpl.*(..))"/>
<aop:advisor advice-ref="beforeaop" pointcut-ref="pointcut"></aop:advisor>
<aop:advisor advice-ref="afteraop" pointcut-ref="pointcut"></aop:advisor>
</aop:config>
</beans>
测试类
package com.atguigu.spring5.AOP1;
//import com.atguigu.spring5.Service1;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class test {
@Test
public void test1(){
ApplicationContext context=new ClassPathXmlApplicationContext("Spring.xml");
User user=(User)context.getBean("UserImpl");
user.add();
}
}