Spring AOP举例子实现

在这里插入图片描述
完成接口和接口的实现,这里使用的是注解的方式设置bean,在applicationContext.xml中填写扫描包即可
<context:component-scan base-package=“AOPTEA”></context:component-scan>

package AOPTEA;

/**
 * @Author susuper
 * @Date 2020/1/1 15:34
 * @description:
 */
public interface SayHello {
    public void say();
}
package AOPTEA;

import org.springframework.stereotype.Component;

/**
 * @Author susuper
 * @Date 2020/1/1 15:39
 * @description:
 */
@Component("SayHelloAspect")
public class SayHelloAspect {
    public void before(){
        System.out.println("before");
    }
    public void after(){
        System.out.println("after");
    }
}

完成

package AOPTEA;

import org.springframework.stereotype.Component;

/**
 * @Author susuper
 * @Date 2020/1/1 15:39
 * @description:
 */
@Component("SayHelloAspect")
public class SayHelloAspect {
    public void before(){
        System.out.println("before");
    }
    public void after(){
        System.out.println("after");
    }
}

在spring的配置文件中说明切入点

<aop:config>
		<!--定义切面-->
		<aop:aspect ref="SayHelloAspect">
			<aop:pointcut id="say" expression="execution(* AOPTEA.SayHello.*(..))"></aop:pointcut>
			<aop:before method="before" pointcut-ref="say"></aop:before>
			<aop:after method="after" pointcut-ref="say"></aop:after>
		</aop:aspect>
	</aop:config>

ref用来指向负责切入的方法类,expression用来指出切入点,id可以认为是一个代号,后面用before和after包裹它。 其中expression有一系列表达方法可以参考这篇文章https://www.cnblogs.com/feng9exe/p/10949665.html

下面完成使用纯注释的配置方法
首先需要在spring中开启aspectj的注解方法

<aop:aspectj-autoproxy></aop:aspectj-autoproxy>

之后SayHello接口和SayHelloImpl不需要修改,修改SayHelloImpl即可
在类上添加@Aspect注解,在对应方法上添加@Before和@After

package AOPTEA;

import org.aspectj.lang.annotation.After;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.springframework.stereotype.Component;

/**
 * @Author susuper
 * @Date 2020/1/1 15:39
 * @description:
 */
@Aspect
@Component("SayHelloAspect")
public class SayHelloAspect {
    @Before("execution(void AOPTEA.SayHello.*())")
    public void before(){
        System.out.println("before");
    }
    @After("execution(void AOPTEA.SayHello.*())")
    public void after(){
        System.out.println("after");
    }
}

Spring IOC(控制反转)和AOP(面向切面编程)是Spring框架的两个核心概念。 1. Spring IOC: Spring IOC是一种设计模式,它通过将对象的创建和依赖关系的管理从代码中移除,实现了对象的解耦和可复用性。具体来说,Spring IOC通过容器管理对象的实例化、依赖注入、生命周期管理等过程,使得应用程序的开发更加简单、灵活和可扩展。 比如,我们在开发一个Web应用时,需要使用数据库连接池来管理数据库连接。传统的做法是在每个需要数据库连接的类中创建连接池对象,并通过构造函数或者setter方法注入到类中。这样,如果我们需要更换连接池,就需要修改所有使用到连接池的类,这会导致代码的耦合性增加、维护性下降。而使用Spring IOC,我们只需要在配置文件中配置连接池对象,然后在需要使用连接池的类中通过注解或者XML配置文件引用该对象即可,这样就可以实现对象的解耦和可复用性。 2. Spring AOPSpring AOP是一种编程范式,它通过在代码执行过程中动态地插入切面代码,实现了系统的模块化和横切关注点的复用。具体来说,Spring AOP通过定义切面(Aspect)和切点(Pointcut),将切面代码织入到应用程序的执行流程中,从而实现了对系统的横切关注点(如日志、安全、事务等)的统一管理。 比如,我们在开发一个Web应用时,需要记录用户的访问日志。传统的做法是在每个需要记录日志的方法中添加记录日志的代码,这样会导致代码的重复和冗余。而使用Spring AOP,我们可以通过定义一个切面类,实现对所有需要记录日志的方法进行拦截,并在方法执行前后插入记录日志的代码。这样就可以实现对系统日志的统一管理,提高代码的复用性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值