AbstractController
を拡張するすべてのコンクリートコントローラで異なるものとなるように設定されたportletBaseViewName
というプロパティを持つ次の抽象クラスがあります。注釈を介した注入とSpringのXMLファイルを介する注入継承に関する制限
public abstract class AbstractController {
private String portletBaseViewName;
protected String getPortletBaseViewName() {
return portletBaseViewName;
}
@Required
@Value("")
public void setPortletBaseViewName(String portletBaseViewName) {
this.portletBaseViewName = portletBaseViewName;
}
}
@Controller
@RequestMapping("VIEW")
public class ReservationOfBooksViewController extends AbstractController{}
私はそうやって、それがXMLで注射を宣言することも可能である知っている:
<bean id="abstractController" class="es.alcampo.portalweb.portlets.common.controller.AbstractController" abstract="true">
<property name="portletBaseViewName" value="" />
</bean>
<bean id="reservationOfBooksViewController" class="es.example.portalweb.portlets.reservationofbooks.controller.ReservationOfBooksViewController" parent="abstractController">
<property name="portletBaseViewName" value="reservationOfBooks" />
</bean>
<bean id="myShopViewController" class="es.example.portalweb.portlets.reservationofbooks.controller.MyShopViewController" parent="abstractController">
<property name="portletBaseViewName" value="myShop" />
</bean>
は私が再定義する必要がありますか?:
@Controller
@RequestMapping("VIEW")
public class ReservationOfBooksViewController extends AbstractController{
@Value("reservationOfBooks")
public void setPortletBaseViewName(String portletBaseViewName) {
super.setPortletBaseViewName(portletBaseViewName);
}
}
私は、以前のが好きではありません注釈を使って具体的なクラスに応じて1つの値などを注入する目的に到達する場合は、最もエレガントなオプションですか?
私は継承を知っていて、アノテーションが競合することがあります。
ありがとうございます。
@Juan:別の '@ Value'が必要ない場合は、別のセッターは必要ありません。 – axtavt
@元:なぜそれぞれの具体的なクラスに別のセッターが必要ですか? – axtavt
urコードを編集してください。解決策としてマークします:) –