java – 为什么Spring的@Configurable有时可以工作,有时不工作?
我试图通过
Spring的@Configurable注释w / @Resource在需要注入的字段上使用自动依赖注入.这涉及到一些设置,如将spring-agent.jar传递给我的JVM.详情
see here.
它主要是工作.当我的Tomcat正在启动时,我看到了AspectJ的初始化消息,我的User对象自动获取FileService引用等. 问题在于有时它不会发生.它似乎是完全随机的有时我启动,依赖关系不会被注入,有时它们是.我以前在@Transactional在我的用户上遇到麻烦,因为它造成了冲突,我相信代理.我使用JPA,所以我的用户被标记为@Entity,所以现在我最好的猜测是这是造成冲突.我读过你不能自动代理一个代理.为了抵消冲突,我遵循了一些在线发现的关于排除CGIIB和Hibernate(我的JPA impl)使用的javassist的注释. 线索: 这是全无的.我所有的@Configurable实例都已注入,也没有注册. 我怎么弄清楚出了什么问题?有人使用@Configurable与JPA?为什么我的dependencyCheck = true当依赖关系未实际注入时抛出错误? 实体 @Entity @Configurable(dependencyCheck = true) @NamedQueries( { @NamedQuery(name = "User.findAll",query = "SELECT user FROM User user"),@NamedQuery(name = "User.findByEmail",query = "SELECT user FROM User user WHERE user.email = :email") }) public abstract class User extends BaseModel { private static final long serialVersionUID = 7881431079061750040L; @Id @GeneratedValue(strategy = GenerationType.TABLE) private Long id; @Column(unique = true,nullable = false) private String email; @Basic(optional = false) private String password; @Resource private transient UserEmailer userEmailer; @Resource private transient FileService fileService; ... aop.xml文件 <!DOCTYPE aspectj PUBLIC "-//AspectJ//DTD//EN" "http://www.eclipse.org/aspectj/dtd/aspectj.dtd"> <aspectj> <weaver options="-verbose"> <include within="com.myapp.domain..*" /> <exclude within="*..*CGLIB*" /> <exclude within="*..*javassist*" /> </weaver> <aspects> <aspect name="org.springframework.beans.factory.aspectj.AbstractInterfaceDrivenDependencyInjectionAspect" /> </aspects> </aspectj> applicationContext.xml中 ... <context:spring-configured /> <context:load-time-weaver /> <context:component-scan base-package="com.myapp" /> ... 解决方法
首先我不得不说,将资源,服务或其他bean注入到数据模型类中作为依赖关系可能不是一个好主意.但这是一个设计问题.
对于@Configurable的使用,我在Spring对象从外部实例化的情况下使用它,如Web应用程序,过滤器或servlet中的自定义标签.我试图使用它的第一种方式是按照你的加载时间编织.这很有效,但它有一些缺点,如热代码部署,而调试不再工作. 我也完全体会到你所描述的问题,所以我决定从加载时间编织转换到编译时间.因此,我在Eclipse中安装了AJDT plugin,并使用了Spring的aspecjt支持.这解决了我的问题. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |