Что вы можете сделать, это создать статический метод, подобный этому:
public static void autowireAllFor(Object target) {
AutowiredAnnotationBeanPostProcessor bpp = new AutowiredAnnotationBeanPostProcessor();
bpp.setBeanFactory(...yourBeanFactory...);
bpp.processInjection(target);
}
и затем для вашего тега вы можете сделать
public class YourTag extends TagSupport {
@Autowired
private SomeBean someBean;
public YourTag() {
YourHelperClass.autowireAllFor(this);
}
}
Очевидным недостатком этого подхода является то, что вы должны делать это для каждого конструктора, но, поскольку TagSupport
имеет только один, это не должно быть проблемой. Вы можете пойти еще дальше и создать вспомогательный суперкласс, который всегда гарантирует автоматическое подключение:
public class SpringTagSupport extends TagSupport {
public SpringTagSupport() {
super();
YourHelperClass.autowireAllFor(this);
}
}
Остальное так же просто, как продлить ваши классы с SpringTagSupport
.