2015-05-05 5 views
0

Я хочу, чтобы получить компонент из класса А, который реализует класс B,весна получение боб с использованием ApplicationContext.getBean()

public class AndroidDeviceRule implements DeviceRule {} 

это прекрасно

return (DeviceRule) context.getBean(myBeanName, DeviceRule.class); 

Но я предпочел бы что-то как

return (DeviceRule) context.getBean(mybeanName, Class<? extends DeviceRule>); 

Но я не могу ..

- Syntax error on token ",", (expected after 
    this token 
    - Syntax error on token(s), misplaced 
    construct(s) 
+0

Почему вы не можете просто написать (DeviceRule) context.getBean (myBeanName)? – duffymo

+0

правда, мне было любопытно, почему я не могу –

ответ

0

Что вы можете сделать, это определить фактическое DeviceRule подтип в качестве общего типа на уровне метода. Вы можете иметь это в двух вариантах:

// with an explicit type passed in (as in your example) 
<T extends DeviceRule> T getSpringBean(String name, Class<T> type) { 
    return (T) applicationContext.getBean(name, type); 
} 


// with no explicit type; will return whatever the caller expects, 
// obviously resulting in a ClassCastException if the cast fails. 
<T extends DeviceRule> T getSpringBean(String name) { 
    return (T) applicationContext.getBean(name); 
} 
1

Я буду рекомендовать автоматического связывания компонент для этого

@Autowired 
DeviceRule deviceRule; 

Гораздо чище подход

Смежные вопросы