繁体   English   中英

使用注解将ID注入抽象类的方法中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM