- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我需要通过类类型查找 bean。当 beans 被代理包装时(一些方法是@Transactional)——ApplicatoinContext 找不到它们。我发现如果我通过接口(interface)查找它们,它就可以工作,但在这种情况下,我使用的是具体类类型。我知道这个 bean 是我正在寻找的类型,但是 getBean() 方法失败了。
我可以调试(并修复)Spring 的 AbstractBeanFactory 代码中的问题。问题是它根据我请求的类型检查 beanInstance 的类型,但 beanInstance.getClass() 是一个代理。 AbstractBeanFactory 应该对此进行补偿并将类型与代理的目标类进行比较。
我有一个修复程序,但我不是特别想使用 Spring 的补丁版本,我怀疑必须有一些我可以配置的东西才能让它工作,或者这真的是一个错误?
最佳答案
Spring 实现 AOP 有两种主要方式(例如 @Transactional
支持):使用代理接口(interface)或 CGLIB。
使用接口(interface)(默认),如果您的类实现任何接口(interface),Spring 将创建一个实现所有接口(interface)的代理。从现在开始,您只能通过该接口(interface)使用您的 bean。你的类(class)深深地埋在他们里面。
如果您改为通过 cglib 启用代理目标类:
<aop:config proxy-target-class="true">
Spring 将创建一个子类(显然仍然实现所有接口(interface))。这将解决您的问题。但是请记住,返回的对象实际上并不是您的类,而是动态生成的子类,它包装并委托(delegate)给您的原始对象。在大多数情况下,这应该不是问题。
不,当然这不是错误,而是众所周知的行为,不,不需要给 Spring 打补丁。
关于java - Spring ApplicationContext.getBean(Class c) 不适用于代理类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11535527/
我使用的是Spring3.1 我已经以编程方式注册了一个 Bean,我也想以编程方式检索它,但没有成功。 public void createBean(String beanName, String
我正在使用方法ApplicationContext.getBean(String name, Class requiredType)。该 bean 的类型为 util:set。我的代码如下所示: Se
getBean() 方法在这里做什么,它在程序中如何工作? ApplicationContext aplicntxt = new ClassPathXmlApplicationContext("spr
我正在使用方法 ApplicationContext.getBean(String name, Class requiredType)。 bean 的类型为 util:set。我的代码如下: Set
我有一个界面 @Component("a") @Scope("prototype") Public interface A{ ..... } 和实现接口(interface)a的b类 public c
我不明白为什么我的集成测试会抛出异常。 集成测试## package sample import grails.test.mixin.* import org.junit.* /** * See t
当我使用 getBean("test") 我有一门课 @Component public class TEST { } 这个 bean 可以加载吗? 最佳答案 getBean() 是区分大小写的,但是
这里我有一个名为 RegionsServiceImpl 的带有 @Service 的主类。我正在使用 ApplicationContext.getBean 对其进行初始化,但我想使用 @Autowir
我使用的是 Jackson 自定义序列化器,已知该序列化器不支持 Spring 依赖项注入(inject),因此我的序列化器类如下: public class ShippingAddressDataS
我正在浏览 spring 文档,并发现了以下声明 - You can then use getBean to retrieve instances of your beans. The Applica
我有一个 Spring Boot 应用程序。当我调用 context.getBean(MyController.class) 时,它工作正常。当我调用 context.getBean("MyContr
由于依赖注入(inject)意味着控制反转,因此我在以下调用中看不到 IOC: Car car = (Car)ApplicationContext.getBean("car"); 这不是 Spri
ReadOnlyProperty.getBean() 的 Javadoc 是这样说的: Object getBean() Returns the Object that contains this p
我正在尝试从 Solr 转到 Elasticsearch,我一直在将我使用 Solr 工作的一些类转换为 Elasticsearch,但现在我陷入了困境。 在 Solr 中我曾经有: QueryRes
在一个spring应用中,我们是这样写的,通过手动加载spring应用上下文来获取一个bean。 ApplicationContext context = new ClassPathXmlApplic
我有一个类 Bar 实现如下: class Bar implements ApplicationContextAware { ApplicationContext applicationCon
我在我的应用程序中使用 SpringBoot,目前正在使用 applicationContext.getBean(beanName,beanClass) 在执行操作之前获取我的 bean。我在几个问题
protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Job job = ctx.g
我在 Spring 中有一个 bean 定义,它是代理对应物,可以在任何地方使用: someInterceptor 一切正常;在
我正在使用 JSF + Spring+ Hibernate protected @Inject ChartOfAccount chartOfAccount; 我基本上想从列表中填充 chartOfAc
我是一名优秀的程序员,十分优秀!