我试图通过
Spring的@Configurable注释w / @Resource在需要注入的字段上使用自动依赖注入.这涉及到一些设置,如将spring-agent.jar传递给我的JVM.详情
see here.
它主要是工作.当我的Tomcat正在启动时,我看到了AspectJ的初始化消息,我的User对象自动获取FileService引用等.
问题在于有时它不会发生.它似乎是完全随机的有时我启动,依赖关系不会被注入,有时它们是.我以前在@Transactional在我的用户上遇到麻烦,因为它造成了冲突,我相信代理.我使用JPA,所以我的用户被标记为@Entity,所以现在我最好的猜测是这是造成冲突.我读过你不能自动代理一个代理.为了抵消冲突,我遵循了一些在线发现的关于排除CGIIB和Hibernate(我的JPA impl)使用的javassist的注释.
线索:
这是全无的.我所有的@Configurable实例都已注入,也没有注册.
>从数据库重新加载(恢复)实体似乎没有帮助;它是工作还是不工作.
>重启Tomcat任何时间也不会修复它.唯一再次出现骰子的事情是重新部署.换句话说,如果我重新部署它可能会工作.
我怎么弄清楚出了什么问题?有人使用@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" /> ...