Spring5参考指南
  • 简介
  • 前言
    • 1. “Spring”代表什么
    • 2. Spring和Spring框架的历史
    • 3. 设计哲学
    • 4. 反馈和贡献
    • 5. 开始
  • 核心技术
    • 1. IoC容器
      • 1.1 IoC容器和Beans介绍
      • 1.2 IoC容器概述
      • 1.3 Bean概述
      • 1.4 依赖
      • 1.5 Bean作用域
      • 1.6 自定义Bean
      • 1.7 Bean的继承
      • 1.8 容器扩展点
      • 1.9 基于注解的容器配置
      • 1.10 类路径扫描和托管组件
      • 1.11 使用JSR 330标准注解
      • 1.12 基于Java的容器配置
      • 1.13 环境抽象
      • 1.14 注册LoadTimeWeaver
      • 1.15 ApplicationContext的其他功能
      • 1.16 BeanFactory
    • 2.资源
      • 2.1介绍
      • 2.2资源接口
      • 2.3内置资源实现
      • 2.4ResourceLoader
      • 2.5ResourceLoaderAware接口
      • 2.6资源作为依赖
      • 2.7应用程序上下文和资源路径
    • 3.验证,数据绑定,和类型转换
      • 3.1使用Spring Validator接口
      • 3.2将代码解析为错误消息
      • 3.3bean操作和BeanWrapper
      • 3.4Spring类型转换
      • 3.5Spring字段格式化
      • 3.6配置全局Date和Time格式
      • 3.7Spring验证
    • 4.SpEL Spring表达式语言
      • 4.1求值
      • 4.2bean定义中的表达式
      • 4.3语言引用
    • 5.Spring AOP
      • 5.1什么是AOP
      • 5.1Spring AOP的能力和目标
      • 5.3AOP代理
      • 5.4@AspectJ 支持
      • 5.5基于Schema的AOP支持
      • 5.6选择要使用的AOP声明样式
      • 5.7混合Aspect类型
      • 5.8代理机制
      • 5.9程序创建@AspectJ代理
      • 5.10在Spring应用程序中使用AspectJ
      • 5.11更多资源
    • 6.Spring AOP APIs
      • 6.1Pointcut API
      • 6.2Advice API
      • 6.3Advisor API
      • 6.4使用ProxyFactoryBean来创建AOP代理
      • 6.5简介的代理定义
      • 6.6使用ProxyFactory创建AOP代理
      • 6.7操作被通知的对象
      • 6.8使用auto-proxy功能
      • 6.9使用TargetSource的实现
      • 6.10定义新的Advice Types
    • 7.Null-safety
    • 8.数据缓存和解码器
    • 9.附录
      • 9.1XML Schemas
      • 9.2创建XML Schemas
  • 测试
    • 1.Spring测试介绍
    • 2.单元测试
      • 2.1Mock Objects
      • 2.2单元测试支持类
    • 3.集成测试
      • 3.1概览
      • 3.2集成测试的目的
      • 3.3JDBC测试支持
      • 3.4注解
      • 3.5Spring TestContext框架
      • 3.6Spring MVC测试框架
      • 3.7WebTestClient
    • 4.更多资源
  • 数据访问
    • 1.事务管理
    • 2.DAO支持
    • 3.JDBC
      • 3.1选择JDBC数据库访问方法
      • 3.2包层次结构
      • 3.3使用JDBC核心类控制基本JDBC处理和错误处理
      • 3.4控制数据库连接
      • 3.5JDBC批处理操作
      • 3.6使用SimpleJdbc
      • 3.7将JDBC操作建模为Java对象
      • 3.8参数和数据值处理的常见问题
      • 3.9嵌入式数据库支持
      • 3.10初始化数据源
    • 4.ORM
      • 4.1Spring ORM介绍
      • 4.2ORM集成的一般注意事项
      • 4.3Hibernate
      • 4.4JPA
    • 5.使用Object-XML映射封装XML
  • Web Servlet
    • 1. Spring Web MVC
      • 1.1 DispatcherServlet
      • 1.2 Filters
      • 1.3 Controllers注解
      • 1.4 URI链接
      • 1.5 异步请求
      • 1.6 CORS
      • 1.7 Web Security
      • 1.8 HTTP Caching
      • 1.9 View技术
      • 1.10 MVC配置
      • 1.11 HTTP/2
    • 2. REST客户端
    • 3. 测试
    • 4. WebSockets
      • 4.1 WebSocket介绍
      • 4.2 WebSocket API
      • 4.3 SockJS Fallback
      • 4.4 STOMP
  • Web Reactive
    • 1.Spring WebFlux
      • 1.1 Overview
      • 1.2 Reactive Core
      • 1.3 DispatcherHandler
      • 1.4 Annotated Controllers
      • 1.5 Functional Endpoints
      • 1.6 URI Links
      • 1.7 CORS
      • 1.8 Web Security
      • 1.9 View Technologies
      • 1.10 HTTP Caching
      • 1.11 WebFlux Config
      • 1.12 HTTP/2
    • 2.WebClient
    • 3.WebSockets
    • 4.测试
    • 5.Reactive库
由 GitBook 提供支持
在本页

这有帮助吗?

  1. 核心技术
  2. 6.Spring AOP APIs

6.8使用auto-proxy功能

到目前为止,我们已经考虑通过使用ProxyFactoryBean或类似的工厂bean显式地创建AOP代理。

Spring还允许我们使用“auto-proxy”bean定义,它可以自动代理选定的bean定义。这是在Spring的“bean post processor”基础设施上构建的,它支持在容器加载时修改任何bean定义。

在这个模型中,你在XML bean定义文件中设置了一些特殊的bean定义,以配置自动代理基础结构。这允许你声明符合自动代理条件的目标。你不需要使用ProxyFactoryBean。

有两种方法可以做到这一点:

  • 通过使用在当前上下文中引用特定bean的自动代理创建者。

  • 一个需要单独考虑的自动代理创建的特殊情况:由源代码级元数据属性驱动的自动代理创建。

6.8.1 Auto-proxy Bean定义

本节介绍由org.springframework.aop.framework.autoproxy包提供的自动代理创建者。

BeanNameAutoProxyCreator

BeannameAutoProxyCreator类是一个BeanPostProcessor,它自动为名称与文字值或通配符匹配的Bean创建AOP代理。下面的示例演示如何创建BeanNameAutoProxyCreator bean:

<bean class="org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator">
    <property name="beanNames" value="jdk*,onlyJdk"/>
    <property name="interceptorNames">
        <list>
            <value>myInterceptor</value>
        </list>
    </property>
</bean>

与ProxyFactoryBean一样,有一个interceptorNames属性而不是一个拦截器列表,以允许原型顾问的正确行为。命名的“拦截器”可以是顾问或任何建议类型。

与一般的自动代理一样,使用BeanNameAutoProxyCreator的主要目的是将相同的配置一致地应用于多个对象,配置量最小。它是将声明性事务应用于多个对象的常用选择。

名称匹配的bean定义(如前面示例中的jdkMyBean和onlyjdk)是带有目标类的普通旧bean定义。AOP代理由BeanNameAutoProxyCreator自动创建。同样的建议也适用于所有匹配的bean。注意,如果使用advisors(而不是前面示例中的拦截器),则切入点可能会不同地应用于不同的bean。

DefaultAdvisorAutoProxyCreator

一个更通用和强大的自动代理创建者是DefaultAdvisorAutoProxyCreator。这将在当前上下文中自动应用合格的advisors,而不需要在自动代理顾问的bean定义中包含特定的bean名称。它提供了与BeanNameAutoProxyCreator相同的配置和避免重复的优点。

使用此机制涉及:

  • 指定DefaultAdvisorAutoProxyCreator bean定义。

  • 在相同或相关的上下文中指定任意数量的顾问。请注意,这些必须是顾问,而不是拦截器或其他建议。这是必要的,因为必须有一个切入点来评估,以检查每个建议对候选bean定义的合格性。

DefaultAdvisorAutoProxyCreator自动评估每个顾问中包含的切入点,以查看它应该应用于每个业务对象(如示例中的BusinessObject1和BusinessObject2)的建议。

这意味着任何数量的顾问都可以自动应用于每个业务对象。如果任何顾问中没有与业务对象中的任何方法匹配的切入点,则不会代理该对象。当为新的业务对象添加bean定义时,如果需要,它们将被自动代理。

一般来说,自动代理的优点是使调用者或依赖项无法获得未建议的对象。在此applicationContext上调用getbean(“businessobject1”)将返回AOP代理,而不是目标业务对象。(前面显示的“内部bean”也提供了这个好处。)

下面的示例创建一个DefaultAdvisorAutoProxyCreator bean和本节讨论的其他元素:

<bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"/>

<bean class="org.springframework.transaction.interceptor.TransactionAttributeSourceAdvisor">
    <property name="transactionInterceptor" ref="transactionInterceptor"/>
</bean>

<bean id="customAdvisor" class="com.mycompany.MyAdvisor"/>

<bean id="businessObject1" class="com.mycompany.BusinessObject1">
    <!-- Properties omitted -->
</bean>

<bean id="businessObject2" class="com.mycompany.BusinessObject2"/>

如果你希望将相同的建议一致地应用于许多业务对象,那么DefaultAdvisorAutoProxyCreator非常有用。一旦基础结构定义就位,就可以添加新的业务对象,而不包括特定的代理配置。你还可以通过对配置的最小更改轻松地进入其他方面(例如,跟踪或性能监视方面)。

DefaultAdvisorAutoProxyCreator支持过滤(通过使用命名约定,只评估某些advisors ,从而允许在同一工厂中使用多个不同配置的AdvisorAutoProxyCreators)和排序。Advisors可以实现org.springframework.core.Ordered接口,以确保在出现问题时正确排序。在前面的示例中使用的TransactionAttributeSourceAdvisor具有可配置的order值。默认设置是无序的。

上一页6.7操作被通知的对象下一页6.9使用TargetSource的实现

最后更新于3年前

这有帮助吗?