学习Spring的第二天

1.Aop的增强类型

        1.前置增强(Before Advice)            

前置增强(Before Advice)是AOP中的一种增强类型,用于在目标方法执行之前执行额外的逻辑。具体来说,前置增强可以在目标方法执行前插入自定义的操作,例如参数校验、权限检查等。

在Spring框架中,可以使用以下注解实现前置增强:

  1. @Before:通过该注解将一个方法标记为前置增强,在目标方法执行前会调用该方法。可以在@Before注解中指定切点表达式(Pointcut Expression),来选择特定的目标方法进行增强。

下面是一个示例代码,演示如何使用@Before注解实现前置增强:

在上述示例中,@Before注解被应用于UserService类的beforeAddUser()方法上。通过execution表达式指定了要增强的目标方法为addUser(),并在该方法执行前打印一条日志信息。

当调用UserService的addUser()方法时,前置增强的逻辑会先于目标方法的执行而被执行,从而实现了在目标方法执行前进行额外操作的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。

2.后置增强(After Advice)

后置增强(After Advice)是AOP中的一种增强类型,用于在目标方法执行之后执行额外的逻辑。具体来说,后置增强可以在目标方法执行完成后插入自定义的操作,例如记录方法返回值、处理异常等。

在Spring框架中,可以使用以下注解实现后置增强:

  1. @After:通过该注解将一个方法标记为后置增强,在目标方法执行后会调用该方法。可以在@After注解中指定切点表达式(Pointcut Expression),来选择特定的目标方法进行增强。

下面是一个示例代码,演示如何使用@After注解实现后置增强:

 

在上述示例中,@After注解被应用于UserService类的afterAddUser()方法上。通过execution表达式指定了要增强的目标方法为addUser(),并在该方法执行后打印一条日志信息。

当调用UserService的addUser()方法时,后置增强的逻辑会在目标方法执行完成后被执行,从而实现了在目标方法执行后进行额外操作的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。同时,还可以使用@AfterReturning和@AfterThrowing注解来实现更细粒度的后置增强,分别用于处理方法的返回值和异常。

3.返回增强(After Returning Advice)

 

返回增强(After Returning Advice)是AOP中的一种增强类型,用于在目标方法成功执行并返回结果后执行额外的逻辑。具体来说,返回增强可以在目标方法成功执行且返回结果后插入自定义的操作,例如对方法返回结果进行处理或转换。

在Spring框架中,可以使用以下注解实现返回增强:

  1. @AfterReturning:通过该注解将一个方法标记为返回增强,在目标方法成功执行且返回结果后调用该方法。可以在@AfterReturning注解中指定切点表达式(Pointcut Expression),来选择特定的目标方法进行增强。

下面是一个示例代码,演示如何使用@AfterReturning注解实现返回增强:

在上述示例中,@AfterReturning注解被应用于UserService类的afterGetUser()方法上。通过pointcut属性指定了要增强的目标方法为getUser(),并通过returning属性指定了返回结果的参数名称为result。

当调用UserService的getUser()方法时,如果方法成功执行且返回结果不为null,返回增强的逻辑会被执行,从而实现了对方法返回结果进行额外操作的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。同时,还可以使用@AfterThrowing注解来实现处理方法抛出异常的增强逻辑。

 4.异常增强(After Throwing Advice)

异常增强(After Throwing Advice)是AOP中的一种增强类型,用于在目标方法抛出异常时执行额外的逻辑。具体来说,异常增强可以在目标方法抛出异常后插入自定义的操作,例如捕获和处理方法抛出的异常。

在Spring框架中,可以使用以下注解实现异常增强:

 

  1. @AfterThrowing:通过该注解将一个方法标记为异常增强,在目标方法抛出异常后调用该方法。可以在@AfterThrowing注解中指定切点表达式(Pointcut Expression),来选择特定的目标方法进行增强。

下面是一个示例代码,演示如何使用@AfterThrowing注解实现异常增强:

在上述示例中,@AfterThrowing注解被应用于UserService类的afterGetUserException()方法上。通过pointcut属性指定了要增强的目标方法为getUser(),并通过throwing属性指定了异常参数的名称为ex。

当调用UserService的getUser()方法时,如果方法抛出异常,异常增强的逻辑会被执行,从而实现了捕获和处理方法抛出的异常的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。同时,还可以使用@AfterReturning注解来实现处理方法返回结果的增强逻辑。

5.环绕增强(Around Advice)

环绕增强(Around Advice)是AOP中的一种增强类型,它可以在目标方法执行前后以及异常抛出时都插入自定义的逻辑。具体来说,环绕增强可以完全控制目标方法的执行,包括在方法执行之前预处理、替换目标方法的返回值或抛出异常,并在方法执行之后进行后处理。

在Spring框架中,可以使用以下注解实现环绕增强:

  1. @Around:通过该注解将一个方法标记为环绕增强,在目标方法执行前后以及异常抛出时都会调用该方法。在@Around注解中需要使用ProceedingJoinPoint参数来指定目标方法的执行点。

下面是一个示例代码,演示如何使用@Around注解实现环绕增强

 

在上述示例中,@Around注解被应用于UserService类的aroundGetUser()方法上。通过execution表达式指定了要增强的目标方法为getUser()。

在aroundGetUser()方法内部,可以通过ProceedingJoinPoint参数来控制目标方法的执行。可以在前后加入自定义的逻辑,并通过joinPoint.proceed()方法执行目标方法。在try-catch块中,可以处理目标方法抛出的异常。

当调用UserService的getUser()方法时,环绕增强的逻辑会在目标方法执行之前和之后都被执行,从而实现了完全地控制目标方法执行的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。同时,还可以使用@Before、@After、@AfterReturning和@AfterThrowing等注解来实现更细粒度的增强。

6.最终增强(After (finally) Advice)

AOP最终增强(After (finally) Advice)是AOP中的一种增强类型,用于在目标方法执行完成后无论是否抛出异常,都会执行额外的逻辑。具体来说,最终增强可以在目标方法执行结束后插入自定义的操作,无论目标方法是否正常返回或者抛出异常。

在Spring框架中,可以使用以下注解实现最终增强:

  1. @After:通过该注解将一个方法标记为最终增强,在目标方法执行完成后无论是否抛出异常都会调用该方法。可以在@After注解中指定切点表达式(Pointcut Expression),来选择特定的目标方法进行增强。

下面是一个示例代码,演示如何使用@After注解实现最终增强:

在上述示例中,@After注解被应用于UserService类的afterAddUser()方法上。通过execution表达式指定了要增强的目标方法为addUser()。

当调用UserService的addUser()方法时,无论方法是否正常返回或者抛出异常,最终增强的逻辑都会在方法执行完成后被执行,从而实现了无论发生何种情况都进行额外操作的效果。

需要注意的是,切面(例如上述示例中的UserService)需要被Spring容器所管理,以便AOP能够生效。这通常通过在类上添加@Component或其他相关注解来实现。同时,还可以使用@Before、@AfterReturning和@AfterThrowing等注解来实现更细粒度的增强。

 2.使用注解实现Spring ioc

1.常用注解

在Spring框架中,可以使用注解实现IOC(控制反转)来管理Bean的依赖关系和生命周期。以下是一些常用的注解来实现IOC:

  1. @Component:将一个类标记为组件,表示它将被Spring容器管理。

  2. @Controller:将一个类标记为控制器,通常用于处理HTTP请求。

  3. @Service:将一个类标记为服务层组件,通常用于提供业务逻辑的方法。

  4. @Repository:将一个类标记为持久层组件,通常用于与数据库交互。

  5. @Autowired:自动装配依赖关系,告诉Spring容器在需要时自动注入相关的Bean。

  6. @Qualifier:与@Autowired一起使用,指定具体的Bean进行注入。

  7. @Value:将配置文件中的值注入到属性中。

  8. @Scope:指定Bean的作用域,如Singleton(单例)、Prototype(原型)等。

2.实现

下面是一个简单的示例代码,演示如何使用注解实现IOC:

在上述示例中,UserService和UserRepository分别使用@Component和@Repository注解标记,表示它们将由Spring容器进行管理。

通过@Autowired注解,UserService将依赖的UserRepository自动注入,无需手动实例化或配置。Spring容器会在需要时自动查找相应的Bean,并完成注入。

需要注意的是,为了让Spring能够扫描和识别注解,需要在配置文件中添加以下配置:

上述配置会告诉Spring容器扫描指定包及其子包中的类,将标记有相关注解的类注册为Bean。

此外,还需要在配置文件中启用注解驱动:

 以上是使用注解实现Spring IOC的基本示例。通过合理地使用注解,可以简化配置,提高开发效率,并且使代码更加清晰可读。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值