Spring AOP实现动态代理

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

Spring AOP 面向切面编程的一些方法。

一、AOP中术语

  • 连接点 JointPoint可以织入切面的位置。
  • 切点 Pointcut:真正织入切面的方法。
  • 通知 Advice:又叫增强,具体织入的代码。(前置,后置,环绕,异常,最终通知)
  • 切面 Aspect:切点+通知 =切面
  • 织入 Weaving:将通知应用到目标对象上的过程。
  • 代理对象 Proxy:目标对象被织入通知后产生的新对象。
  • 目标对象 Target:被织入统治的对象。

二、Spring实现AOP的3种方式

  • 第一种:Spring框架结合AspectJ框架实现的AOP,基于注解方式。
  • 第二种:Spring框架结合AspectJ框架实现的AOP,基于XML方式。
  • 第三种:Spring框架自己实现的AOP,基于XML配置方式。

1.基于注解的方式

引入AspectJ依赖

 <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aspects</artifactId>
            <version>6.1.13</version>
</dependency>
全注解开发 
@Configuration  //代替spring.xml文件
@ComponentScan({"com.powernode....."})  //组件扫描注释
@EnableAspectJAutoProxy(proxyTargetClass=True)  //启用自动代理
public class Spring6Config{
}

ApplicationContext applicationContext = new AnnotationConfigApplicationContext(Spring6Config);

        ​​注解解释:  @Aspect(): 表示切面类      ​ @Order() 可以对切面类进行排序

                          ​​​​​  @Before: 前置通知

                            @AfterReturning: 后置通知

                          ​​​​​  @Around: 环绕通知

                            *使用环绕通知方法需要参数  ProceedingJoinPoint 调用该参数的proceed()方法执行目标方法。

                          ​​​​​  @AfterThrowing: 异常通知

                          ​​​​​  @After: 最终通知 finally语句块中

若是发生异常,则后环绕与后置通知不执行。

        切入语句:execution([public] * com.exmple..*(..))

                           [方法权限] (返回值) (类名) (方法名) (参数)  异常

为了实现切点表达式代码的复用可以声明方法如:

@Pointcut("execution表示式")
public void generalPointCut(){

}

//目标方法引用
@Before("generalPointCut()")
public void beforeAdvice(){
    System.out.println("前置通知");
}

2.基于XML配置文件

<bean id="userService" class="com.powernode.spring6.service.UserService"></bean>
<bean id="timerService" class="com.powernode.spring6.service.TimerService"></bean>


<!--aop的配置>
<aop:config>
    <!--切点表达式-->
    <aop:pointcut id="mypointcut" expression="execution(* com.powernode.spring.service..*(..))"/>
    <aop:aspect ref="timerAspect">
        <aop:around method="aroundAdvice" pointcut-ref="mypointcut" />
    </aop:aspect>
</aop:config>

总结

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值