我想在Activiti中使用Spring表达式语言引用JPA存储库。但是,由于Spring使用<jpa:repositories/>
创建存储库bean,因此它们没有与它们关联的标识。有没有办法使用SpEL引用某种类型的bean而不是id?我尝试使用我认为是LocationRepository
的生成名称(locationRepository),但没有成功。引用没有ID的bean
3
A
回答
1
我假设LocationRepository
是一个接口,以及正在为您生成的底层实现。当Spring创建一个bean并且没有明确指定id时,它通常使用实现类的类名来确定bean id。因此,在这种情况下,您的LocationRepository
的ID可能是生成的类的名称。
但是由于我们不知道它是什么,我们可以创建一个Spring FactoryBean
,它通过自动装配从应用上下文获得LocationRepository
,并以新名称将其放回到应用上下文中。
public class LocationRepositoryFactoryBean extends AbstractFactoryBean<LocationRepository> {
@Autowired
private LocationRepository bean;
public Class<?> getObjectType() { return LocationRepository.class; }
public Object createInstance() throws Exception { return bean; }
}
在你的应用程序上下文的xml:
<bean name="locationRepository" class="your.package.LocationRepositoryFactoryBean"/>
然后,您应该能够引用您LocationRepository
对象与bean ID locationRepository。
0
不知道如何在SPEL中执行此操作,但可以使用@Qualifier
来决定应该注入哪个bean。
如果你想要的话,你可以创建自己的定制@Qualifier注解和访问bean的基础上。
像
@Target({ElementType.FIELD, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Qualifier // Just add @Qualifier and you are done
public @interface MyRepository{
}
要注入它现在使用的仓库豆和其他地方@MyRepository
注解。
@Repository
@MyRepository
class JPARepository implements AbstractRepository
{
//....
}
其注入
@Service
class fooService
{
@Autowire
@MyRepositiry
AbstractRepository repository;
}
+0
不完全解决我的问题,但很好知道,感谢您的输入=) – redZebra2012
相关问题
- 1. 引用IEnumerable中没有ID的项目
- 2. 引用一个没有ID的div
- 3. 有没有办法打印出每个bean弹簧的bean id创建
- 4. 春季3.1:有多个@Qualifier引用指向同一个bean ID
- 5. param对bean没有传入复合组件的引用
- 6. GWT编译bean引用(没有源代码可用于类型)
- 7. 有没有办法在xml文件中获取Bean ID
- 8. 如何在spring中加载一个没有id,名字的bean?
- 9. 没有faces-config.xml的CDI bean
- 10. 没有Spring的Hibernate SessionFactory bean
- 11. org.springframework.beans.factory.NoSuchBeanDefinitionException:没有名为'eventpublisher'的bean可用
- 12. Datalife引擎重写URL没有ID
- 13. 获取从表索引(TR没有ID)
- 14. 没有应用我的ID
- 15. Spring:没有调用Bean init方法,它的属性没有值
- 16. 将没有ID的对象的CSS修改为引用
- 17. struts 2 bean没有创建
- 18. 我没有包含java.lang.String bean?
- 19. 春天:没有autowire bean
- 20. 如何获得没有ID的引用URL?
- 21. bean id activemqTx有什么意义?
- 22. 没有ID的clearTimeout
- 23. 有没有简单的方法来使用集合的密钥来引用id?
- 24. Bean方法与AjaxBehaviorEvent和没有AjaxBehaviorEvent的bean方法的区别?
- 25. 没有ID
- 26. NoSuchBeanDefinitionException:没有匹配的类型的bean
- 27. 是否有可能在Spring中的原型bean内部保持singleton bean中的原型引用和单引用?
- 28. 无法引用bean ElasticSearch
- 29. 寻找spring bean引用?
- 30. 尽管@Component和@Bean没有找到类的bean
对不起,我在长周末之前发布了这个延迟。它是有道理的,他们的bean名称是生成的类而不是接口名称,这就是为什么我不能引用它。感谢您的可能解决方案! – redZebra2012