Почему в моем случае контекст создает компонент?

Не могли бы вы рассказать мне, почему в моем случае контекст создает "simple"bean-компонент, если он имеет циклические зависимости? На мой взгляд, нужно исключить исключение, которое говорит о круговых зависимостях! Класс конфигурации:

package config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan(basePackages = "service")
public class AppConfig {
}

обслуживание пакетов ; import org . весенняя графика . бобы . завод . аннотация . Автоподдержка ; import org . весенняя графика . стереотип . Компонент ; @Component public class Simple { @Autowired private Простой простой ; public Simple getSimple () { return simple ; } } класс:

import config.AppConfig;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;
import service.Simple;


public class Launcher {

    public static void main(String[] args) {
        ApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfig.class);
        Simple simple1 = ctx.getBean("simple", Simple.class);
        System.out.println(simple1.getSimple());
    }

}

И пусковая установка:

@Autowired
public Simple(Simple simple) {
    this.simple = simple;
}

Результатом приложения является «сервис». Ошибка создания bean-компонента с именем «simple»: запрошенный bean-компонент в настоящее время находится в создании: существует ли неразрешимая циклическая ссылка? »@ 6b53e23f». Если я добавлю конструктор

@Autowired

то возникает исключение simple.

Итак, почему создается bean-компонент, когда я помещаю Simplen поле?

java,spring,spring-annotations,

1

Ответов: 2


3 принят

Поскольку настройка Simpleполя выполняется только после создания Simpleэкземпляра, и в этой точке у вас есть действительный Simpleэкземпляр для назначения этому полю. Это полевая инъекция. При создании экземпляра вашего Simpleкласса вам не понадобятся экземпляры полей с автопрограммированием .

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


0

Итак, весной, когда он пытается создать компонент, он сначала пытается разрешить все Autowired (инъекции зависимостей). В нашем случае вы пытаетесь ввести тот же класс. Это означает, что Spring при создании Simple bean-компонента пытается разрешить вводимые классы, которые, в свою очередь, являются одним и тем же классом.

Существует циклическая зависимость, которая вызывает ошибку.

ява, весна, весна-аннотации,
Похожие вопросы