ignore/veto CDI制作方法如何?
How to ignore/veto CDI producer method?
我知道我可以 ProcessAnnotatedType.veto() 忽略这个豆子。
但是,我想忽略生产者提供的bean。例如:我想在生产环境中忽略它
@Produces
@ApplicationScoped
@Development
EnvironmentDao developmentDao() {
return new DevelopmentDao()
}
有人知道吗?
谢谢。
@更新
其实我有另一个解决方案,比如
@Development
@ApplicationScoped
class DevelopmentProducer {
@Produces
EnvironmentBean developmentBean = new EnvironmentBean() {
@Override
String getText() {
return 'I am DevelopmentBean'
}
}
@Produces
@ApplicationScoped
EnvironmentDao developmentDao() {
return new DevelopmentDao()
}
}
这样我就可以使用 ProcessAnnotatedType 忽略这个 Producer。但是,我想知道是否有任何方法可以忽略生产者方法而不是整个生产者?
谢谢。
CDI 没有提供直接禁用生产者的方法。
事实上,事件 @Alternative
不会起作用。但是,@Specializes
会起作用,因为 bean class 会真正被删除,因此找不到生产者。但这不是你想要的。
您还可以利用 Extension
并观察 ProcessProducer
事件。它不提供否决方法,但您可以在 setProducer
方法中用适合您需要的新生产者替换此类生产者。
我知道我可以 ProcessAnnotatedType.veto() 忽略这个豆子。
但是,我想忽略生产者提供的bean。例如:我想在生产环境中忽略它
@Produces
@ApplicationScoped
@Development
EnvironmentDao developmentDao() {
return new DevelopmentDao()
}
有人知道吗? 谢谢。
@更新 其实我有另一个解决方案,比如
@Development
@ApplicationScoped
class DevelopmentProducer {
@Produces
EnvironmentBean developmentBean = new EnvironmentBean() {
@Override
String getText() {
return 'I am DevelopmentBean'
}
}
@Produces
@ApplicationScoped
EnvironmentDao developmentDao() {
return new DevelopmentDao()
}
}
这样我就可以使用 ProcessAnnotatedType 忽略这个 Producer。但是,我想知道是否有任何方法可以忽略生产者方法而不是整个生产者?
谢谢。
CDI 没有提供直接禁用生产者的方法。
事实上,事件 @Alternative
不会起作用。但是,@Specializes
会起作用,因为 bean class 会真正被删除,因此找不到生产者。但这不是你想要的。
您还可以利用 Extension
并观察 ProcessProducer
事件。它不提供否决方法,但您可以在 setProducer
方法中用适合您需要的新生产者替换此类生产者。