(1)创建配置类,不需要创建 xml 配置文件
@Configuration@ComponentScan(basePackages = {"com.atguigu"})@EnableAspectJAutoProxy(proxyTargetClass = true)public class ConfigAop {}
1**、创建两个类,增强类和被增强类,创建方法
被增强类:**
package com.wzy.aspect;import org.springframework.stereotype.Component;@Componentpublic class User {public void user() {System.out.println("user方法执行啦");}}
增强类:
package com.wzy.aspect;import org.aspectj.lang.ProceedingJoinPoint;import org.aspectj.lang.annotation.*;import org.springframework.stereotype.Component;//增强的类@Component//@Aspectpublic class UserProxy {//抽取公共部分@Pointcut(value = "execution(* com.wzy.aspect.User.user(..))")public void pointdemo() {}//前置通知//@Before 注解表示作为前置通知@Before(value = "pointdemo()")public void before() {System.out.println("1、before.........");}//后置通知(返回通知)@AfterReturning(value = "pointdemo()")public void afterReturning() {System.out.println("2、afterReturning.........在方法返回值后执行");}//最终通知@After(value = "pointdemo()")public void after() {System.out.println("3、after.........在方法后执行");}//异常通知@AfterThrowing(value = "pointdemo()")public void afterThrowing() {System.out.println("4、afterThrowing.........");}//环绕通知@Around(value = "pointdemo()")public void around(ProceedingJoinPoint proceedingJoinPoint) throws Throwable {System.out.println("环绕之前.........");//被增强的方法执行Object proceed = proceedingJoinPoint.proceed();System.out.println("环绕之后.........");}}
<?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:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context"xmlns:aop="http://www.springframework.org/schema/aop"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/aop https://www.springframework.org/schema/aop/spring-aop.xsd"><!-- 开启注解扫描,创建对象 --><context:component-scan base-package="com.wzy.aspect"></context:component-scan><!--创建对象,方式二--><!-- <bean id="user" class="com.wzy.aspect.User"/><bean id="userProxy" class="com.wzy.aspect.UserProxy"/>--><aop:config><!-- 切入点:对哪个类的那个方法增强--><aop:pointcut id="u" expression="execution(* com.wzy.aspect.User.user())"/><!-- ref:增强类对象 的bean的id --><aop:aspect ref="userProxy"><!--method="before":前置通知pointcut-ref="u":引入要切入的点--><aop:before method="before" pointcut-ref="u"/></aop:aspect></aop:config></beans>
测试:
package com.wzy.aspect;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class TestAspect {
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("com/wzy/aspect/bean.xml");
@Test
public void test1() {
User user = applicationContext.getBean("user", User.class);
user.user();
}
}
输出结果:
1、before……… user方法执行啦
