我试图将一个bean注入到一个枚举中,但是在调用someMethod时,我不断收到空指针异常。
此Inject bean into enum中提到的答案对我有用。我想知道为什么我的代码不起作用
with(['products' => function($q) use($category_id){
$q->where('category_id',18);
}])
->find($feature_ids)
->groupBy('feature_type_id');
答案 0 :(得分:1)
您链接的答案是循环// Ensure delegate is bound (just once)
CapsuleComponent->OnComponentBeginOverlap.RemoveDynamic(this, &AInteractiveFoliageActor::CapsuleTouched);
CapsuleComponent->OnComponentBeginOverlap.AddDynamic(this, &AInteractiveFoliageActor::CapsuleTouched);
值,并使用setter注入enum
依赖项
DataProvider
之所以起作用,是因为public void postConstruct() {
for (ReportType rt : EnumSet.allOf(ReportType.class)) {
rt.setDataPrepareService(dataPrepareService);
}
}
类是内部ReportTypeServiceInjector
,因此Spring可以看到并实例化它。
反正这是一个疯狂的设计。避免它。
最终,使枚举保持简单并提取static class
用法。
您的原始代码不起作用,因为Spring无法在DataProvider
s中@Autowire
/ @Inject
依赖项。
答案 1 :(得分:1)
但是,我同意很多次,我们需要将一些实时行为与Enum值一起封装。
我建议创建一个新类,并在其中封装Enum。
class GenresService{
// 1st option: Declare Genres enum reference at class level and
// initialize using class constructor/injection.
// Genres g;
@Inject DataProvider dataprovider;
//2nd option: pass Genres value to method at real time.
public int someMethod(Genres g) {
return dataprovider.method1();
}
}
答案 2 :(得分:0)
要进行任何注射,您需要同时管理enum
。您可以尝试注入enum
,但是如何以及如何注入?它显示常量值,此外还具有私有的无参数构造函数。
因此,可能的工作方式是在dataProvider
内部进行JNDI查找-初始化someMethod()
或使用某些静态上下文访问器。
而且:对于Spring,它不是@Inject
而是@Resource
或@Autowired