🗒️使用 AOP
type
status
date
slug
summary
tags
category
icon
password

使用注解装配AOP

  1. 什么是AOP(Aspect-Oriented Programming)?
    1. AOP,即面向切面编程,是一种编程范式,它提供了一种将横切关注点(如日志、安全等)与业务逻辑分离的方法,从而提高代码的模块化。
  1. 在Spring中,如何使用注解来实现AOP?
    1. 在Spring中,我们可以使用@Aspect注解来定义一个切面,并使用@Before@After@Around等注解来定义通知。然后,我们可以使用executionwithinthis等表达式来定义切点。
  1. 什么是@Transactional注解在Spring中的作用?
    1. @Transactional注解用于声明事务边界。当我们在类或方法上使用此注解时,Spring会确保该方法在数据库事务中执行。
  1. 如何使用自定义注解来实现AOP?
    1. 我们可以定义一个自定义注解,并在需要的方法上使用它。然后,我们可以在切面中使用@Around("@annotation(自定义注解)")来捕获这些方法。在切面的通知方法中,我们可以访问注解的属性,并根据需要进行操作。
  1. 为什么说使用注解实现AOP是最好的方式?
    1. 使用注解实现AOP既简单又明确。它允许我们直接在源代码中看到哪些方法被AOP规则影响,这使得代码更易于理解和维护。

AOP 中可以避开的一些问题

  1. 为什么在使用Spring AOP时,直接访问被注入Bean的字段可能会导致问题?
    1. 当我们启用AOP时,Spring会为我们创建一个代理类。这个代理类是原始类的子类,并且它不会初始化自己继承的任何字段,包括final类型的字段。因此,如果我们直接访问这些字段,可能会得到null。
  1. 如何避免在使用Spring AOP时出现上述问题?
    1. 为了避免这个问题,我们应该总是通过方法来访问被注入Bean的字段,而不是直接访问。此外,如果我们的Bean可能会被代理,我们不应该编写public final方法,因为代理类无法覆写这些方法。
  1. 为什么Spring刻意不初始化代理类继承的字段?
    1. Spring不初始化代理类继承的字段,是因为代理类的目的是代理方法,而不是存储状态。初始化这些字段没有必要,而且可能会浪费资源。
  1. 如果一个Bean不允许任何AOP代理,应该怎么做来“保护”自己在运行期不会被代理?
    1. 如果一个Bean不希望被代理,可以通过将其声明为final类来实现。因为Java不允许继承final类,所以Spring无法为其创建代理类。
 
Vue3 与 Axios 跨域问题访问数据库
Loading...