我想做一件简单的事情.在CDI中注入合格String(或File).
所以我有一个限定符:
@Retention(RetentionPolicy.RUNTIME)
@Target({FIELD,METHOD,PARAMETER,TYPE})
@Qualifier
public @interface FilesRepositoryPath {}
Run Code Online (Sandbox Code Playgroud)
我有一个制片人:
public class FilesRepositoryPathProducer {
@Produces
@FilesRepositoryPath
public String getRepositoryDirectory() {
return "path.taken.from.configuration";
}
}
Run Code Online (Sandbox Code Playgroud)
而我正在尝试使用它:
@ApplicationScoped
public class FilesRepository {
@Inject
public FilesRepository(@FilesRepositoryPath String filesDirectory) {
//Do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
但是,WELD无法实例化此bean.我得到一个例外:
org.jboss.arquillian.impl.event.FiredEventException: org.jboss.weld.exceptions.UnproxyableResolutionException: WELD-001410 The injection point [field] @Inject private za.co.fnb.commercial.dms.file.FilesRepositoryBeanTest.repo has non-proxyable dependencies
Run Code Online (Sandbox Code Playgroud)
我知道这String是不可原谅的,但为什么WELD想要创建一个代理?它有@Dependent范围,所以AFAIK它不应该创建代理.我怎样才能使它工作?
小智 3
你需要默认构造函数
@ApplicationScoped
public class FilesRepository {
public FilesRepository() {
}
@Inject
public FilesRepository(@FilesRepositoryPath String filesDirectory) {
//Do some stuff
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1584 次 |
| 最近记录: |