私は JSF を使用しており、かなり長い間問題を抱えています。多くの場所を検索しましたが、適切な答えが見つかりませんでした。
依存性注入を抽象クラス (またはより一般的には階層の上位クラス) で機能させることはできますか? また、継承を使用する場合、注釈をどのように処理する必要がありますか? 一般的な慣行は、抽象クラスに注釈を付けず、具体的なクラスにのみ注釈を付けることであると読みましたが、その場合、その抽象クラスには注入がないことを意味しますか?
私の問題はそれです(最後のコメントを確認してください):
抽象クラス
@ManagedBean
@ViewScoped
public abstract class AbstractController<T extends VersionedObject> implements Serializable {
@ManagedProperty("#{libraryVersionController}")
private LibraryVersionController libraryVersionController;
public List<T> loadFromDatasource(IVersionedServiceBase<T> service) {
log.info("Loading generic VO from data source");
VersionedObjectFilter filter = new VersionedObjectFilter();
filter.setSelectedLibVersion(libraryVersionController.getSelectedItem());
// etc
}
// getters, setters...
}
具体的なクラス
@ManagedBean
@ViewScoped
public class DomainController extends AbstractController<Domain> implements Serializable {
private List<Domain> allItems;
private Domain[] selectedItem;
@ManagedProperty(value = "#{domainService}")
private DomainService domainService;
@PostConstruct
public void loadFromDatasource() {
allItems = super.loadFromDatasource(domainService);
// !! DOES NOT WORK, null pointer exception on abstract class (libraryVersionController)
// etc
}
ゲッターとセッターは正しく設定されています。.xhml で読み取ることができたのは、参照している具象クラス (#{domainController.allItems}) であり、@PostConstruct は 1 つしかありません。私は JSF2.1 と Mojarra を使用しています。
ご協力いただきありがとうございます !