Spring的AOP和spring对Jdbc的支持(佟刚)

本文深入解析Spring AOP的核心概念,包括面向切面编程原理、常用术语、在Spring中启用AspectJ注解支持的步骤、引入通知的方法、使用XML进行配置的实例以及Spring对JDBC的支持细节。通过实例演示了如何在实际项目中应用Spring AOP,为开发者提供了一站式解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.spring的AOP 
AOP(Aspect-Oriented Programming, 面向切面编程):利用的是动态代理技术.
好处:
每个事物逻辑位于一个位置, 代码不分散, 便于维护和升级业务模块更简洁, 只包含核心业务代码.

2.在AOP中经常用的到术语: 
切面(Aspect):  横切关注点(跨越应用程序多个模块的功能)被模块化的特殊对象
通知(Advice):  切面必须要完成的工作
目标(Target): 被通知的对象
代理(Proxy): 向目标对象应用通知之后创建的对象
切入点(PointCut): 切面通知执行的”地点”的定义
连接点(Jointpoint): 与切入点匹配的执行点

AspectJ: Java 社区里最完整最流行的 AOP 框架.

3.在 Spring 中启用 AspectJ 注解支持 
    
    包:lib/aspectj/aspectjrt.jar 和 aspectjweaver.jar
    XML:<aop:aspectj-autoproxy>
    java:在类前@Aspect
    方法前:
        @Before: 前置通知, 在方法执行之前执行
        
        @After : 后置通知, 在方法执行之后执行
        
        @AfterRunning: 返回通知, 在方法返回结果之后执行
            将  returning="result" 属性添加到 @AfterReturning 注解中.在方法中使用 result 就可以直接得到.
        
        @AfterThrowing : 异常通知, 在方法抛出异常之后
            将 throwing 属性添加到 @AfterThrowing 注解中
            
        @Around : 环绕通知, 围绕着方法执行
            连接点的参数类型必须是 ProceedingJoinPoint
            ProceedingJoinPoint 的 proceed() 方法来执行被代理的方法
    
    切入点定义:  @Pointcut 一个空的方法前声明,引用时写这个方法的方法名加括号.
        可以用 && || ! 合并切入点
        切入点表达式:execution(* ArithmeticCalculator.add(int, ..)) || execution(* ArithmeticCalculator.mul(int, ..)
    
    在方法中声明 JoinPoint : 
        得到方法名joinpoint.getSignature().getName();
        输出参数:Arrays.asList(joinpoint.getArgs())

    指定切面的优先级: @Order(2) 值越小,优先级越高.

4.引入通知 
@DeclareParents
注解类型的 value 属性表示哪些类是当前引入通知的目标. value 属性值也可以是一个 AspectJ 类型的表达式, 以将一个即可引入到多个类中.  defaultImpl 属性中指定这个接口使用的实现类

5.使用XML方式进行配置 
基于注解的声明要优先于基于 XML 的声明.
    <aop:config>
        横切性关注点
        <aop:pointcut expression="execution(* cn.itcast.spring.aop.xml.*.*(..))" id="pointcut"/> 
        
        AOP 的切面信息都要配置在这个里面
        <aop:aspect ref="LogginAspect"> 
            前置通知
            <aop:before method="beforeLog" pointcut-ref="pointcut"/> 
            后置通知
            <aop:after method="afterLog" pointcut-ref="pointcut"/> 
            返回通知
            <aop:after-returning method="afterReturningLog" pointcut-ref="pointcut" returning="result"/> 
            异常通知
            <aop:after-throwing method="afterThrowingLog" pointcut-ref="pointcut" throwing="e"/> 
            环绕通知
            <aop:around method="aroundLog" pointcut="execution(* cn.itcast.spring.aop.xml.ArithmeticCalculatorImpl.mul(..))"/> 
        </aop:aspect>
        
    </aop:config>


6.spring 对JDBC的支持 
    JdbcTemplate 类被设计成为线程安全的
    JdbcTemplate 只有 setter 方法, SimpleJdbcTemplate 只有构造方法.所以要注意注入 dataSource 的方式.    
    JdbcTemplate 的注入,使用的是 org.springframework.jdbc.core.JdbcTemplate . 并且要使用 setter 方式注入
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate"> 
        <property name="dataSource" ref="dataSource"/> 
    </bean> 
    
    SimpleJdbcTemplate 的注入,使用的 org.springframework.jdbc.core.simple.SimpleJdbcTemplate 类, 并且要使用构造方法注入.
    从 JdbcTemplate 演变而来, 它利用 Java 1.5 的特性(自动装箱, 泛型, 可变长度等)来简化开发    
    <bean id="simpleJdbcTemplate" 
        class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate"> 
        <constructor-arg ref="dataSource"/> 
    </bean>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

开源技术之家

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值