Spring AOP的讲解

AOP(Aspect-Oriented Programming)是一种面向切面编程的技术,它通过将程序中的横切关注点与业务逻辑分离,使得代码更加简洁、易于维护和扩展。在本文中,我们将深入探讨AOP的背景、原理、实现方式以及应用场景。

一、AOP的背景

在软件开发中,我们经常会遇到一些横切关注点,比如日志记录、缓存管理、安全检查等。这些关注点通常分散在应用程序的各个模块中,导致代码重复、难以维护和扩展。为了解决这些问题,AOP应运而生。

二、AOP的原理

AOP通过将程序中的横切关注点与业务逻辑分离,实现了代码重用和简化。具体来说,AOP采用了一种称为“切面”的技术,将所有横切关注点抽象成一个个切面,然后将这些切面插入到程序执行流程中的特定位置,实现对程序行为的控制和调整。

三、AOP的实现方式

在AOP中,切面可以通过不同的实现方式来实现,包括静态代理、动态代理和字节码操作等。其中,动态代理是一种较为常见的实现方式,它通过在运行时生成代理对象来实现对目标对象方法的增强。在Java中,动态代理主要有两种实现方式:JDK Proxy和CGLIB。

四、AOP的应用场景

AOP广泛应用于日志记录、事务管理、安全检查、性能监控等方面。例如,在一个Web应用程序中,我们可能需要记录用户请求的日志、检查用户权限等。如果将这些功能分散到每个业务逻辑中去实现,会导致代码重复和难以维护。而如果采用AOP技术,将这些共同的关注点提取出来,就可以使代码变得更加简洁、易于维护和扩展。

总之,AOP是一种非常重要的编程思想,可以有效地解决横切关注点带来的问题,使得代码更加简洁、易于维护和扩展。在实际开发中,我们可以选择不同的AOP框架来实现自己的需求,比如Spring AOP和AspectJ等。

AOP基于XML配置的入门案例:

首先是导入架包和创建所需要的包

1 创建service类,这个类完成核心功能操作


public class BookserImpl implements Bookser {


    @Override
    public void chan() {
        System.out.println("打打看看");

    }

    @Override
    public void rep() {

    }

    @Override
    public void lse() {

    }

    @Override
    public void aa() {

    }
}

接口

public interface Bookser {
    void  chan();
    void  rep();
    void  lse();
    void  aa();
}

创建Logger类,这个类是用来做功能的增强。

public class Logger {
    public void  before(){
        System.out.println("前置");
    }
    public void  afterReturning(){
        System.out.println("后置");
    }
    public void  afterTwroing(){
        System.out.println("异常“");
    }
    public void  after(){
        System.out.println("释放");
    }
}

 在 src 目录下创建一个 Spring 的配spring .xml,配置内容如下。

<?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.xsd
	http://www.springframework.org/schema/aop
	http://www.springframework.org/schema/aop/spring-aop.xsd">

  <!--1.把所有类的对象交给IOC容器进行管理-->
<bean id="lohher" class="com.zm.logger.Logger"/>
  <bean id="bookser" class="com.zm.serlet.impl.BookserImpl"/>
  <!--2.AOP的配置:让增强类 的 哪个方法  动态进行何种增强   核心类 的 哪个方法-->
<aop:config>
       <aop:aspect id="check" ref="lohher">
         <aop:before method="before" pointcut="execution(* *..BookserImpl.*(..))"/>
         <aop:before method="afterReturning" pointcut="execution(* *..BookserImpl.*(..))"/>
         <aop:before method="afterTwroing" pointcut="execution(* *..BookserImpl.*(..))"/>
         <aop:before method="after" pointcut="execution(* *..BookserImpl.*(..))"/>

       </aop:aspect>


</aop:config>

</beans>
public class Bookstest {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context=new ClassPathXmlApplicationContext("serivce.xml");
        Bookser bookser = context.getBean(Bookser.class);
        bookser.chan();
    }
}

完后就可以在servlet中测试了

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值