当前位置: 首页 > 面试题库 >

春季的ProxyFactoryBean

阚允晨
2023-03-14
问题内容

有人可以用简单的术语解释ProxyFactoryBean吗?

我看到很多地方都引用了它。


问题答案:

ProxyFactoryBean用于将拦截器逻辑应用于现有目标Bean,以便在调用该Bean上的方法时,拦截器在该方法调用之前和之后执行。这是面向方面的编程(AOP)的示例。

最好用一个简单的例子来解释。AOP的经典用例是将缓存应用于方法调用的结果。可以使用ProxyFactoryBean以下方式进行连接:

<bean id="targetService" class="com.x.MyClass"/>

<bean id="cachingInterceptor" class="com.x.MyCachingInterceptor"/>

<bean id="cachedService" class="org.springframework.aop.framework.ProxyFactoryBean">
    <property name="target" ref="targetService"/>
    <property name="interfaces">
        <list>              
            <value>com.x.MyService</value>
        </list>
    </property>
    <property name="interceptorNames">
        <list>
            <value>cachingInterceptor</value>
        </list>
    </property>
</bean>

我们有一个targetService类型为bean
的类型com.x.MyClass,它实现了接口com.x.MyService。我们还有一个名为拦截器的Bean
cachingInterceptor,它实现了接口org.aopalliance.intercept.MethodInterceptor

此配置将生成一个名为的新bean cachedService,该bean
实现该MyService接口。任何对该对象上方法的调用都将首先通过该cachingInterceptor对象的invoke()方法传递,在这种情况下,该方法将在其内部缓存中查找先前方法调用的结果。它将返回缓存的结果,或允许方法调用继续进行到上的适当方法targetService

targetService 本身对此一无所知,它完全不知道所有这些AOP正在进行的事情。

ProxyFactoryBean
由于各种原因(例如,远程存根,事务管理),它在Spring内部被大量使用以生成代理,但是它也非常适合在应用程序逻辑中使用。



 类似资料:
  • 问题内容: 我有一个Java应用程序,它从主类开始(不是Spring Boot应用程序)。而且我想使用Spring retry在连接丢失时重试。据我所知,我需要在Spring应用程序的主类之上添加@EnableRetry批注,然后在我的方法之上使用@Retryable进行重试。但是我认为这在非​​Spring应用程序中将不起作用。是否可以在简单的Java应用程序(而非spring应用程序)中使用s

  • 问题内容: 我如何让Spring从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根目录,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 总的来说,我对Web上的Spring和Java还是很陌生,但是周末我一直在为此苦苦挣扎。将所有配置整合在一起并使Spring在IntelliJ上与gradle一起使用是一个挑战。 我正在尝试在Spring中实施另一个项目,以便更好地了解如何使用它。 我整个上午都在收到此错误,并且在Spring上浏览了许多参考资料和指南,但看不到问题出在哪里。 由以下原因引起:org.springfra

  • 问题内容: 我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法: 引入注释 一个旨在成为继任者的工具集。 可以很好地集成到休眠本身中,以使用例如注释进行缓存。 使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别) 就我个人而言,我认为还不够彻底,因此我可能更愿意考虑发展得更为积极。尽管这似乎是最完整的实现(例如,读取和写入

  • 问题内容: 只需要您对Spring声明式事务管理的专家意见。这是我的设置: DAO层是使用Spring JdbcTemplate的普通JDBC(没有Hibernate等) 服务层是具有声明式事务的POJO,如下所示- 通过上述设置,一切正常。但是,当我说时,我在日志文件中看到错误消息。对于服务层中的所有get *方法,都会发生这种情况。 现在我的问题是: 答:我必须设置为只读吗?我所有的方法都是纯

  • 问题内容: 我有一个maven spring项目(最新版本),我想编写一些junit测试(最新版本)。 我的问题是我的Spring bean是自动装配的,当我从junit test调用它们时,我得到了空指针异常,因为spring不能自动装配它们。 如何加载上下文,以便自动连线? 问题答案: 您是否学习过Spring参考文档中的“ 测试”一章?这是您应该从以下示例开始的示例: 如果您进入,则需要-但