[英]Injection by id in a method of an abstract class using annotations
我想知道是否可以使用注释重现此xml和平代码:
<bean id="mobileRedirectController" class="uk.co.web.device.MobileRedirectController">
<property name="deviceUserAgent" ref="mobileUserAgent" />
</bean>
<util:set id="mobileUserAgent">
<value>Mobile</value>
<value>iPhone</value>
<value>...</value>
</util:set>
<bean id="tabletRedirectController" class="uk.co.web.device.TabletRedirectController">
<property name="deviceUserAgent" ref="tabletUserAgent" />
</bean>
<util:set id="tabletUserAgent">
<value>iPad</value>
<value>...</value>
</util:set>
和我的类是这样的(只是与我的问题相关的代码):
public class MobileRedirectController extends AbstractRedirectController {
}
public class TabletRedirectController extends AbstractRedirectController {
}
public abstract class AbstractRedirectController {
protected Set<String> deviceUserAgent = new HashSet<String>();
public void setDeviceUserAgent(Set<String> deviceUserAgent) {
this.deviceUserAgent = deviceUserAgent;
}
}
现在,如果删除Bean实例化的xml,我将得到以下内容:
<util:set id="mobileUserAgent">
<value>Mobile</value>
<value>iPhone</value>
<value>...</value>
</util:set>
<util:set id="tabletUserAgent">
<value>iPad</value>
<value>...</value>
</util:set>
和类:
@Controller("mobileRedirectController")
public class MobileRedirectController extends AbstractRedirectController {
}
@Controller("tabletRedirectController")
public class TabletRedirectController extends AbstractRedirectController {
}
public abstract class AbstractRedirectController {
protected Set<String> deviceUserAgent = new HashSet<String>();
public void setDeviceUserAgent(Set<String> deviceUserAgent) {
this.deviceUserAgent = deviceUserAgent;
}
}
现在我的问题是,有没有一种方法可以将我的列表mobileUserAgent注入相关的控制器mobileRedirectController和tabletUserAgent到tabletRedirectController中,而无需将代码从AbstractRedirectController转移到MobileRedirectController和TabletRedirectController?
您可以将代码保留在抽象控制器中,但需要编写一些额外的代码来注入Set
。 在XML版本中,您显式设置了属性。 使用批注,您将需要使用构造函数或setter注入来获取您感兴趣的Set
。
@Controller("mobileRedirectController")
public class MobileRedirectController extends AbstractRedirectController {
@Resource("mobileUserAgent")
public MobileRedirectController(Set<String> deviceUserAgent) {
setDeviceUserAgent(deviceUserAgent);
}
}
@Controller("tabletRedirectController")
public class TabletRedirectController extends AbstractRedirectController {
@Resource("tabletUserAgent")
public TabletRedirectController(Set<String> deviceUserAgent) {
setDeviceUserAgent(deviceUserAgent);
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.