[Java[Spring]AOP

step1:定义主方法:
package com.how2java.service;


public class ProductService {
     
    public void doSomeService(){
         
        System.out.println("doSomeService");
         
    }
     
}

step2:定义辅助功能:

package com.how2java.aspect;
import org.aspectj.lang.ProceedingJoinPoint;
 
public class LoggerAspect {
 
    public Object log(ProceedingJoinPoint joinPoint) throws Throwable { //通过环绕连接点获得被通知方法的参数;
        System.out.println("start log:" + joinPoint.getSignature().getName());//通过getSignature返回被通知方法标识;
        Object object = joinPoint.proceed();
        System.out.println("end log:" + joinPoint.getSignature().getName());
        return object;
    }
}
step3:配置文件设置:
<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
   http://www.springframework.org/schema/beans
   http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
   http://www.springframework.org/schema/aop
   http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
   http://www.springframework.org/schema/tx
   http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
   http://www.springframework.org/schema/context     
   http://www.springframework.org/schema/context/spring-context-3.0.xsd">
  
    <bean name="c" class="com.how2java.pojo.Category">
        <property name="name" value="yyy" />
    </bean>
 
    <bean name="p" class="com.how2java.pojo.Product">
        <property name="name" value="product1" />
        <property name="category" ref="c" />
    </bean>
     
    <bean name="s" class="com.how2java.service.ProductService"> //配置主业务:"s": ProductService;

    </bean>   
     
    <bean id="loggerAspect" class="com.how2java.aspect.LoggerAspect"/> //配置辅助功能:唯一id:"loggerAspect";
     
    <aop:config>
        <aop:pointcut id="loggerCutpoint".
            expression=
            "execution(* com.how2java.service.ProductService.*(..)) "/>
             
        <aop:aspect id="logAspect" ref="loggerAspect">
            <aop:around pointcut-ref="loggerCutpoint" method="log"/>//point-ref:切点位置;method:辅助用的方法;
        </aop:aspect>
    </aop:config>    
  
</beans>

step4:注解实现AOP:

1.使用@Component("s") 注解ProductService 类:

@Component("s")
public class ProductService {
2.配置切面方法:

@Aspect 注解表示这是一个切面
@Component 表示这是一个bean,由Spring进行管理
@Around(value = "execution(* com.how2java.service.ProductService.*(..))") 表示对com.how2java.service.ProductService 这个类中的所有方法进行环绕的切面操作

@Aspect	//声明辅助方法;
@Component	//声明bean;	
public class LoggerAspect {
     
    @Around(value = "execution(* com.how2java.service.ProductService.*(..))")	//声明使用的方法;Aroud:环绕切面;execution:切入点;
    public Object log(ProceedingJoinPoint joinPoint) throws Throwable 
3.修改配置文件:
    <context:component-scan base-package="com.how2java.aspect"/> //扫描获得切面方法;
    <context:component-scan base-package="com.how2java.service"/> //扫描获得主方法;
    <aop:aspectj-autoproxy/>	//开始切面操作;






  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java Spring AOP (Aspect-Oriented Programming) 是 Spring 框架中的一个重要特性。它允许你通过将横切关注点(cross-cutting concerns)与程序的核心业务逻辑分离开来,以一种模块化的方式来管理和处理它们。 AOP 提供了一种在程序运行时动态地将通用功能(例如日志记录、性能计数、事务管理等)应用到应用程序中各个模块的方法上的方法。通过使用 Spring AOP,你可以将这些通用功能从核心业务逻辑中解耦出来,以便更好地维护和理解代码。 在 Spring AOP 中,你可以通过使用切点(pointcut)和通知(advice)来定义横切关注点。切点指定了在应用程序中哪些方法需要被拦截,而通知则定义了在拦截点(join point)上执行的操作。 Spring AOP 支持多种类型的通知,包括前置通知(Before advice)、后置通知(After advice)、返回通知(After-returning advice)、异常通知(After-throwing advice)和环绕通知(Around advice)。这些通知可以在方法执行前、后或周围被触发,以便执行与横切关注点相关的行为。 通过配置 Spring AOP,你可以将切点和通知与目标对象关联起来,并在运行时自动应用这些通知。这样,你就能够以一种声明式的方式管理和组织应用程序中的横切关注点,而无需修改核心业务逻辑。 总括来说,Java Spring AOPSpring 框架中的一个功能强大的特性,它通过将横切关注点与核心业务逻辑解耦,提供了一种模块化和可维护的方式来处理通用功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值