2016-01-20 3 views
1

Наверное, это глупый вопрос. В java мы не можем создавать абстрактные классы. Таким образом, мы не можем сделать: AbstractClass abstractClass = new AbstractClass() abstractClass.method();Почему Spring MVC может создавать абстрактные классы?

Но весной мы можем сделать:

@Autowired 
AbstractClass abstractClass; 
abstractClass.method(); 

Почему?

+1

Простого имени недостаточно для того, чтобы класс был абстрактным. Проверьте, что это будет конкретный класс, или он может использовать полиморфизм Runtime. – SMA

+1

Это просто кодирование интерфейса. Весна найдет конкретный класс, который соответствует. Точно так же, как если бы вы сказали '@Autowired List x'. В итоге это будет ArrayList или LinkedList или какой-либо другой Список. – Thilo

+4

И вы можете сделать это, не используя Spring тоже: 'AbstractClass abstractClass = new ConcreteClass()' где 'ConcreteClass расширяет AbstractClass'. – Andreas

ответ

3

Spring будет искать в своем контексте реализацию, соответствующую требуемому типу. Итак, если у вас есть компонент (@Component, @Service, @Repository ...) ConcretClass, который простирается от AbstractClass, тогда этот будет введен.

+0

Спасибо, человек :) – MDP

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