2017-02-18 19 views
0

Весенние документы говорят, что в настоящее время интерфейс DI невозможен. См. Здесь: http://www.springbyexample.org/examples/core-concepts-dependency-injection-to-the-rescue.htmlSpring Boot, DI возможно использование интерфейса, но не возможно весной?

Я только начал работать с Spring boot, и я сделал простой webapp, где использовал DI с использованием интерфейсов. Я не могу найти причину в Интернете. Почему Spring Boot имеет эту функцию, а Spring не имеет!

Пожалуйста, помогите мне в понимании концепции.

Спасибо.

Редактировать

Dao реали.

@Repository 
public class AbcDaoImpl implements AbcDaoInt{ 
    @Autowired 
    JdbcTemplate jdbc; 

    @Override 
    public int selectABC(String user, String password){ 
     // some db query 
    } 

Dao Интерфейс

@Component 
public interface AbcDaoInt{ 
    int selectABC(String user, String password);  
} 

Сервис

@Service 
public class adapter { 
    @Autowired 
    AbcDaoInt abcDao; 

    public Map<String, Object> abc(String user, String password) { 

    try{ 
      int abcId = abcDao.selectABC(user, pwd); 
     } 
    } 
+0

Связанная с вами страница устарела, только частично исправлена ​​и вообще не определяет, что означает «инъекция интерфейса». Вы тоже этого не говорите. Spring Boot использует Spring для инъекций зависимостей, поэтому вопрос спорный. –

+0

@RishiPandey не могли бы вы показать нам какой-то код. Вы не можете выполнить инъекцию интерфейса, так как вам нужна конкретная реализация. Возможно, вы сбиваете с толку, скажем, интерфейс интерфейса Autowire Interface, где интерфейс - это какой-то интерфейс, но весна будет автонастраивать конкретную реализацию его. – pezetem

+0

@JBНаписать, что я хотел бы указать со связанной страницы, на которой Spring имеет в настоящее время настройку и зависимость от конструктора. И я знаю, что Spring boot использует Spring для DI. Может быть, я не понимаю концепцию, но мой вопрос действительно. – RishiPandey

ответ

1

Там нет никакой разницы между весной и весной-ботинке относительно DI. Можно использовать интерфейс для поля и внедрить реализацию в это поле.

Я не понимаю, что связанная страница означает по

Injection Interface - Это не реализован весной в настоящее время

, кажется, б неправильно наше устаревшее.

+0

@Stefen Спасибо за ответ. Итак, вы хотите сказать, что инъекция интерфейса возможна весной? – RishiPandey

+0

@RishiPandey снова, пока у нас не будет определения «инъекция интерфейса», мы не можем ответить на этот вопрос. У тебя есть один? –

+0

мы не можем определить интерфейс dao как bean в Spring mvc, Spring нужен impl. класс. Но в моем коде (Spring Boot), который я загрузил в разделе редактирования: я использую объект interfaceDao (abdDao). в то время как если я попробую то же самое в Spring MVC, тогда я получу ошибку во время выполнения, которой Spring нужен класс реализации ....? – RishiPandey

1

Что именно вы собираетесь делать с инъекцией интерфейса. не предполагается, что интерфейсы будут реализованы классом java, поэтому всякий раз, когда вы вводите интерфейс, который означает, что какой-либо класс, реализующий интерфейс, должен быть введен.

вот как вы должны это сделать, вам нужно включить проверку компонентов в пакете, где присутствуют эти классы, а затем включить аннотации для использования аннотаций.

<context:component-scan base-package="" /> 
<mvc:annotation-driven> 


public interface singleInterface{ 
    void someMethod(); 
} 

@Component(value="b") 
class B implements singleInterface{ 
    public void someMethod(){ 
    System.out.println(“from b class”); 
    } 
} 

@Component(value=“a”) 
class A implements singleInterface{ 
    public void someMethod(){ 
    System.out.println(“from A class”); 
    } 
} 

//injecting 

@Autowire 
@Qualifier("b") 
singleInterface bInterface; 

bInterface.someMethod();//print from b class. 

@Autowire 
@Qualifier("a") 
singleInterface aInterface; 

aInterface.someMethod();//print from a class. 

это работает на и spring mvc вы не должны позволить component scan весной загрузки.

+0

Мой код также работает. Мой вопрос в том, почему Spring Boot позволяет интерфейс DI. в то время как документы говорят, что Spring не позволяет интерфейс DI. – RishiPandey

+0

вышеупомянутый пост закодирован весной, почему вы говорите, что это запрещено? – Priyamal

+0

Это именно то, что я хочу знать. мы не можем определить интерфейс dao как bean в Spring mvc, Spring нужен impl. класс. Но код, который я разместил в разделе редактирования моего вопроса, использует Spring Boot, где нам не нужно указывать конфигурацию xml. и бобы – RishiPandey