Рубрики
Без рубрики

@Компонент и @компонент. В чем разница? Какой из них следует использовать?

Наибольшее преимущество использования фреймворка, такого как Spring, заключается в автоматической настройке. Только представив libre… Помеченный java, spring, аннотацией.

Наибольшее преимущество использования фреймворка, такого как Spring, заключается в автоматической настройке. Только введя библиотеку или модуль в путь к классу, Spring может автоматически сканировать его и создавать необходимый объект и @Autowrired оно.

@Компонент – это аннотация , которая аннотирует класс . Он говорит Spring использовать этот класс для создания компонента, если от этого класса зависит что-то еще. Создание класса полностью контролируется Spring. И только один был создан для каждого класса.

@Component
class UserService {
    public void updateUser(User user) {
    …
    }
}

@Controller
class UserController {
    private final UserService userService;

    @Autowired
    public UserController(UserService userService) {
        this.userService = userService;
    }
}

В этом примере Spring распознает внешний вид класса User Service e, поскольку он был отмечен аннотацией @Component . Поэтому, когда он пытается инициировать объект UserController , он знает, что ему нужна Служба пользователя для установки в конструктор UserController . И создание Пользовательского сервиса будет полностью контролироваться Spring. Это довольно декларативный способ определения зависимости.

С помощью @Компонента наша жизнь так хороша. Так зачем нам вообще нужно что-то вроде аннотации @Bean ? Когда мы должны его использовать? Во-первых, @Bean – это аннотация, используемая для аннотирования функции (не класса), которая вернет объект класса, который будет зарегистрирован как объект компонента Spring.

Вы можете использовать его в случае, если вы используете стороннюю библиотеку, когда у вас нет доступа к исходному коду библиотеки. Таким образом, вы не можете просто поместить @Component аннотацию класса, который вы создаете для компонента. Вы можете объединить с @Configuration аннотированный класс, содержащий метод, возвращающий компоненты, иначе Spring не будет перехватывать и регистрировать его как компонент для разрешения зависимостей. Давайте рассмотрим этот пример.

class UserService {
    private final PasswordEncoder encoder;

    @Autowired
    public UserService(PasswordEncoder encoder) {
    
            this.encoder = encoder;
    }

    public String createUser(UserCreateReq req) {
        UserEntity user = UserEntity.builder()
                            .setPassword(this.encoder.encode(req.getPassword()))
                            …
                            .build();
        repo.save(user);
    }
} 

@Configuration
class PasswordEncoderConfiguration {
    @Bean
    public PasswordEncoder bCryptPasswordEncoder() {
        return new BCryptPasswordEncoder();
    }
}

В этом примере я не смог изменить кодовую базу библиотеки bcrypt, чтобы создать объект encoder. Я должен использовать класс @Configuration для создания компонента, который мне нужен, в методе внутри этого @Конфигурация класс. Таким образом, мы могли бы создать столько бобовых объектов, сколько вы захотите. И вы должны явно настроить эти компоненты самостоятельно, когда произойдет конфликт. Один из способов разрешить этот конфликт – использовать аннотацию @Квалификатор в конструкторе зависимого класса.

Это все. Счастливого кодирования.

Оригинал: “https://dev.to/htintrinh/bean-and-component-what-is-the-different-which-one-should-use-be-used-3foe”