## 接口的使用
org.springframework.aop.Advisor

- 使用Advisor的程序包
  程序包 | 说明
  --- | ---
  org.springframework.aop | Core Spring AOP interfaces, built on AOP Alliance AOP interoperability interfaces.
  org.springframework.aop.aspectj | AspectJ integration package.
  org.springframework.aop.aspectj.annotation | Classes enabling AspectJ 5 @Annotated classes to be used in Spring AOP.
  org.springframework.aop.aspectj.autoproxy | Base classes enabling auto-proxying based on AspectJ.
  org.springframework.aop.framework | Package containing Spring's basic AOP infrastructure, compliant with the AOP Alliance interfaces.
  org.springframework.aop.framework.adapter | SPI package allowing Spring AOP framework to handle arbitrary advice types.
  org.springframework.aop.framework.autoproxy | Bean post-processors for use in ApplicationContexts to simplify AOP usage by automatically creating AOP proxies without the need to use a ProxyFactoryBean.
  org.springframework.aop.interceptor | Provides miscellaneous interceptor implementations.
  org.springframework.aop.support | Convenience classes for using Spring's AOP API.

- - ### org.springframework.aop中Advisor的使用

    org.springframework.aop中Advisor的子接口
    限定符和类型 | 接口和说明
    --- | ---
    `interface` | `IntroductionAdvisor` Superinterface for advisors that perform one or more AOP introductions.
    `interface` | `PointcutAdvisor` Superinterface for all Advisors that are driven by a pointcut.

  - ### org.springframework.aop.aspectj中Advisor的使用

    org.springframework.aop.aspectj中Advisor的子接口
    限定符和类型 | 接口和说明
    --- | ---
    `interface` | `InstantiationModelAwarePointcutAdvisor` Interface to be implemented by Spring AOP Advisors wrapping AspectJ aspects that may have a lazy initialization strategy.

    实现Advisor的org.springframework.aop.aspectj中的类
    限定符和类型 | 类和说明
    --- | ---
    `class` | `AspectJExpressionPointcutAdvisor` Spring AOP Advisor that can be used for any AspectJ pointcut expression.
    `class` | `AspectJPointcutAdvisor` AspectJPointcutAdvisor that adapts an `AbstractAspectJAdvice` to the `PointcutAdvisor` interface.
    `class` | `DeclareParentsAdvisor` Introduction advisor delegating to the given object.

    参数类型为Advisor的org.springframework.aop.aspectj中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `static AspectJPrecedenceInformation` | AspectJAopUtils.`getAspectJPrecedenceInformationFor(Advisor anAdvisor)` Return the AspectJPrecedenceInformation provided by this advisor or its advice.
    `static boolean` | AspectJAopUtils.`isAfterAdvice(Advisor anAdvisor)` Return `true` if the advisor is a form of after advice.
    `static boolean` | AspectJAopUtils.`isBeforeAdvice(Advisor anAdvisor)` Return `true` if the advisor is a form of before advice.

    类型变量类型为Advisor的org.springframework.aop.aspectj中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `static boolean` | AspectJProxyUtils.`makeAdvisorChainAspectJCapableIfNecessary(List<Advisor> advisors)` Add special advisors if necessary to work with a proxy chain that contains AspectJ advisors.

  - ### org.springframework.aop.aspectj.annotation中Advisor的使用

    实现Advisor的org.springframework.aop.aspectj.annotation中的类
    限定符和类型 | 类和说明
    --- | ---
    `protected static class` | `ReflectiveAspectJAdvisorFactory.SyntheticInstantiationAdvisor` Synthetic advisor that instantiates the aspect.

    返回Advisor的org.springframework.aop.aspectj.annotation中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `Advisor` | AspectJAdvisorFactory.`getAdvisor(Method candidateAdviceMethod, MetadataAwareAspectInstanceFactory aspectInstanceFactory, int declarationOrder, String aspectName)` Build a Spring AOP Advisor for the given AspectJ advice method.
    `Advisor` | ReflectiveAspectJAdvisorFactory.`getAdvisor(Method candidateAdviceMethod, MetadataAwareAspectInstanceFactory aspectInstanceFactory, int declarationOrderInAspect, String aspectName)`

    返回变量类型为Advisor的类型的org.springframework.aop.aspectj.annotation中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `List<Advisor>` | BeanFactoryAspectJAdvisorsBuilder.`buildAspectJAdvisors()` 去容器中获取到所有的切面信息保存到缓存中
    `protected List<Advisor>` | AnnotationAwareAspectJAutoProxyCreator.`findCandidateAdvisors()`
    `List<Advisor>` | AspectJAdvisorFactory.`getAdvisors(MetadataAwareAspectInstanceFactory aspectInstanceFactory)` Build Spring AOP Advisors for all annotated At-AspectJ methods on the specified aspect instance.
    `List<Advisor>` | ReflectiveAspectJAdvisorFactory.`getAdvisors(MetadataAwareAspectInstanceFactory aspectInstanceFactory)`

  - ### org.springframework.aop.aspectj.autoproxy中Advisor的使用

    返回变量类型为Advisor的类型的org.springframework.aop.aspectj.autoproxy中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected List<Advisor>` | AspectJAwareAdvisorAutoProxyCreator.`sortAdvisors(List<Advisor> advisors)` Sort the rest by AspectJ precedence.

    类型变量类型为Advisor的org.springframework.aop.aspectj.autoproxy中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `protected void` | AspectJAwareAdvisorAutoProxyCreator.`extendAdvisors(List<Advisor> candidateAdvisors)` Adds an `ExposeInvocationInterceptor` to the beginning of the advice chain.
    `protected List<Advisor>` | AspectJAwareAdvisorAutoProxyCreator.`sortAdvisors(List<Advisor> advisors)` Sort the rest by AspectJ precedence.

  - ### org.springframework.aop.framework中Advisor的使用

    声明为Advisor的org.springframework.aop.framework中的字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected Advisor` | AbstractAdvisingBeanPostProcessor.`advisor`

    返回Advisor的org.springframework.aop.framework中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `Advisor[]` | Advised.`getAdvisors()` Return the advisors applying to this proxy.
    `Advisor[]` | AdvisedSupport.`getAdvisors()`

    返回变量类型为Advisor的类型的org.springframework.aop.framework中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected List<Advisor>` | AdvisedSupport.`getAdvisorsInternal()` Allows uncontrolled access to the `List` of `Advisors`.

    参数类型为Advisor的org.springframework.aop.framework中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | Advised.`addAdvisor(Advisor advisor)` Add an advisor at the end of the advisor chain.
    `void` | AdvisedSupport.`addAdvisor(Advisor advisor)`
    `void` | Advised.`addAdvisor(int pos, Advisor advisor)` Add an Advisor at the specified position in the chain.
    `void` | AdvisedSupport.`addAdvisor(int pos, Advisor advisor)`
    `void` | AdvisedSupport.`addAdvisors(Advisor... advisors)` Add all of the given advisors to this proxy configuration.
    `int` | Advised.`indexOf(Advisor advisor)` Return the index (from 0) of the given advisor, or -1 if no such advisor applies to this proxy.
    `int` | AdvisedSupport.`indexOf(Advisor advisor)`
    `boolean` | Advised.`removeAdvisor(Advisor advisor)` Remove the given advisor.
    `boolean` | AdvisedSupport.`removeAdvisor(Advisor advisor)`
    `boolean` | Advised.`replaceAdvisor(Advisor a, Advisor b)` Replace the given advisor.
    `boolean` | AdvisedSupport.`replaceAdvisor(Advisor a, Advisor b)`

    类型变量类型为Advisor的org.springframework.aop.framework中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `void` | AdvisedSupport.`addAdvisors(Collection<Advisor> advisors)` Add all of the given advisors to this proxy configuration.
    `protected void` | AdvisedSupport.`copyConfigurationFrom(AdvisedSupport other, TargetSource targetSource, List<Advisor> advisors)` Copy the AOP configuration from the given AdvisedSupport object, but allow substitution of a fresh TargetSource and a given interceptor chain.

  - ### org.springframework.aop.framework.adapter中Advisor的使用

    返回Advisor的org.springframework.aop.framework.adapter中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `Advisor` | AdvisorAdapterRegistry.`wrap(Object advice)` Return an `Advisor` wrapping the given advice.
    `Advisor` | DefaultAdvisorAdapterRegistry.`wrap(Object adviceObject)`

    参数类型为Advisor的org.springframework.aop.framework.adapter中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `MethodInterceptor` | AdvisorAdapter.`getInterceptor(Advisor advisor)` Return an AOP Alliance MethodInterceptor exposing the behavior of the given advice to an interception-based AOP framework.
    `MethodInterceptor[]` | AdvisorAdapterRegistry.`getInterceptors(Advisor advisor)` Return an array of AOP Alliance MethodInterceptors to allow use of the given Advisor in an interception-based framework.
    `MethodInterceptor[]` | DefaultAdvisorAdapterRegistry.`getInterceptors(Advisor advisor)`

  - ### org.springframework.aop.framework.autoproxy中Advisor的使用

    返回Advisor的org.springframework.aop.framework.autoproxy中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `protected Advisor[]` | AbstractAutoProxyCreator.`buildAdvisors(String beanName, Object[] specificInterceptors)` Determine the advisors for the given bean, including the specific interceptors as well as the common interceptor, all adapted to the Advisor interface.

    返回变量类型为Advisor的类型的org.springframework.aop.framework.autoproxy中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `List<Advisor>` | BeanFactoryAdvisorRetrievalHelper.`findAdvisorBeans()` Find all eligible Advisor beans in the current bean factory, ignoring FactoryBeans and excluding beans that are currently in creation.
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> beanClass, String beanName)` 判断我们候选的通知能否作用到我们当前正在创建的类上
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`findCandidateAdvisors()` Find all candidate Advisors to use in auto-proxying.
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`findEligibleAdvisors(Class<?> beanClass, String beanName)` 找到合适的增强器对象
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`sortAdvisors(List<Advisor> advisors)` Sort advisors based on ordering.

    类型变量类型为Advisor的org.springframework.aop.framework.autoproxy中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `protected void` | AbstractAdvisorAutoProxyCreator.`extendAdvisors(List<Advisor> candidateAdvisors)` Extension hook that subclasses can override to register additional Advisors, given the sorted Advisors obtained to date.
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> beanClass, String beanName)` 判断我们候选的通知能否作用到我们当前正在创建的类上
    `protected List<Advisor>` | AbstractAdvisorAutoProxyCreator.`sortAdvisors(List<Advisor> advisors)` Sort advisors based on ordering.

  - ### org.springframework.aop.interceptor中Advisor的使用

    声明为Advisor的org.springframework.aop.interceptor中的字段
    限定符和类型 | 字段和说明
    --- | ---
    `static Advisor` | ExposeInvocationInterceptor.`ADVISOR` Singleton advisor for this class.

    返回Advisor的org.springframework.aop.interceptor中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `static Advisor` | ExposeBeanNameAdvisors.`createAdvisorIntroducingNamedBean(String beanName)` Create a new advisor that will expose the given bean name, introducing the NamedBean interface to make the bean name accessible without forcing the target object to be aware of this Spring IoC concept.
    `static Advisor` | ExposeBeanNameAdvisors.`createAdvisorWithoutIntroduction(String beanName)` Create a new advisor that will expose the given bean name, with no introduction

  - ### org.springframework.aop.support中Advisor的使用

    实现Advisor的org.springframework.aop.support中的类
    限定符和类型 | 类和说明
    --- | ---
    `class` | `AbstractBeanFactoryPointcutAdvisor` Abstract BeanFactory-based PointcutAdvisor that allows for any Advice to be configured as reference to an Advice bean in a BeanFactory.
    `class` | `AbstractGenericPointcutAdvisor` Abstract generic `PointcutAdvisor` that allows for any `Advice` to be configured.
    `class` | `AbstractPointcutAdvisor` Abstract base class for `PointcutAdvisor` implementations.
    `class` | `DefaultBeanFactoryPointcutAdvisor` Concrete BeanFactory-based PointcutAdvisor that allows for any Advice to be configured as reference to an Advice bean in the BeanFactory, as well as the Pointcut to be configured through a bean property.
    `class` | `DefaultIntroductionAdvisor` Simple `IntroductionAdvisor` implementation that by default applies to any class.
    `class` | `DefaultPointcutAdvisor` Convenient Pointcut-driven Advisor implementation.
    `class` | `NameMatchMethodPointcutAdvisor` Convenient class for name-match method pointcuts that hold an Advice, making them an Advisor.
    `class` | `RegexpMethodPointcutAdvisor` Convenient class for regexp method pointcuts that hold an Advice, making them an `Advisor`.
    `class` | `StaticMethodMatcherPointcutAdvisor` Convenient base class for Advisors that are also static pointcuts.

    返回变量类型为Advisor的类型的org.springframework.aop.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `static List<Advisor>` | AopUtils.`findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz)` 找到合适的增强器对象

    参数类型为Advisor的org.springframework.aop.support中的方法
    限定符和类型 | 方法和说明
    --- | ---
    `static boolean` | AopUtils.`canApply(Advisor advisor, Class<?> targetClass)` Can the given advisor apply at all on the given class?
    `static boolean` | AopUtils.`canApply(Advisor advisor, Class<?> targetClass, boolean hasIntroductions)` Can the given advisor apply at all on the given class?

    类型变量类型为Advisor的org.springframework.aop.support中的方法参数
    限定符和类型 | 方法和说明
    --- | ---
    `static List<Advisor>` | AopUtils.`findAdvisorsThatCanApply(List<Advisor> candidateAdvisors, Class<?> clazz)` 找到合适的增强器对象