Как обеспечить единое определение bean-компонента для всего дочернего класса в конфигурации Spring?

Я новичок в Spring и изучаю ее, я хочу, чтобы мой контейнер Spring создавал все объекты из определенного пакета.

Класс круга:

@Component
public class Circle extends AbstractShape  {

@Override
public void draw() {

}

@Override
public int calculateArea(int x, int y) {
    return (int) (3.14 * x * y);
}

}

Квадратный класс:

@Component
public class Square extends AbstractShape {
    @Override
    public void draw() {

    }

    @Override
    public int calculateArea(int x, int y) {
        return x * y;
    }
}

Мой класс конфигурации spring, который в основном создает для меня bean-определение:

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

@Configuration
public class ShapeConfig {

    @Bean
    public Circle getCircle() {
        return new Circle();
    }

    @Bean
    public Square getSquare() {
        return new Square();
    }
}

Я хочу, чтобы мое определение bean-компонента расширяло класс «AbstractShape», и не хочу предоставлять одно за другим определение bean-компонента в моем классе конфигурации. Пожалуйста, предложите возможные способы сделать это.

Заранее спасибо,

Приянк

Я не уверен, правильно ли я понял, но почему вы не можете аннотировать Circle и Square как @Component?

Andrej Buday 15.11.2018 18:19

Извините, я пропустил эту часть. Я уже аннотировал как @Component.

Priyank Shah 16.11.2018 06:41
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
45
2

Ответы 2

Аннотирование класса Circle и самого Square с помощью @Component намного проще для такой задачи.

Этот метод идентичен объявлению метода в классе @Configuration, как вы это делаете сейчас.

Вы можете попробовать аннотировать класс AbstractShape, я не знаю, работает ли он

Я уже пометил "Круг" и "Квадрат" как @Component. и аннотирование абстрактного класса - не лучшая идея. потому что вы не можете создать абстрактный класс.

Priyank Shah 16.11.2018 06:44

Это было решено добавлением @ComponenetScan в конфигурацию.

Спасибо за ответы.

Другие вопросы по теме