Spring Start Here 2 Flashcards

1
Q

Разница между @Bean и @Component

A

@Component: используется непосредственно в классе. Подходит для автоматического сканирования классов с аннотациями (@Component, @Service, @Repository, @Controller) и для ситуаций, когда вы хотите, чтобы Spring сам создал бин из класса.

@Bean: используется на уровне метода в классе с аннотацией @Configuration и указывает, что возвращаемый объект метода должен быть зарегистрирован как бин в контексте.
Используется, когда нужен более детальный контроль над созданием бина

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
2
Q

Способы установки связей между бинами

A
  1. wiring - установить связь между двумя бинами, непосредственно вызывая методы, которые создают эти бины.
  2. auto-wiring - автоматический поиск и внедрение зависимостей, подходящих по типу, из контекста Spring. Может быть использована для полей, конструкторов и методов-сеттеров.
  3. Через XML-конфигурацию
How well did you know this?
1
Not at all
2
3
4
5
Perfectly
3
Q

Способы прямого внедрения зависимостей (wiring)

A
  1. Путем прямого вызова одного метода с аннотацией @Bean из другого такого же метода

@Bean
public Parrot parrot() {…}

@Bean
public Person person() {
Person person = new Person();
person.setParrot(parrot());
return person;
}

  1. Путем передачи параметра в метод с аннотацией @Bean

@Bean
public Parrot parrot() {…}

@Bean
public Person person(Parrot parrot) {…}

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
4
Q

Dependency Injection

A

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

Технология DI состоит в том, что фреймворк присваивает значение определенному полю или параметру.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
5
Q

Аннотация @Autowired

A

Используется для автоматического внедрения (инъекции) зависимостей в компоненты.
Spring автоматически находит и подставляет нужные бины в зависимости от типа, избавляя разработчика от необходимости вручную управлять зависимостями.
Когда вы помечаете поле, конструктор или сеттер аннотацией @Autowired, Spring пытается автоматически найти подходящий бин в контексте и внедрить его.
Если Бинов несколько, возникнет конфликт, который можно разрешить с помощью @Qualifier или @Primary.

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
6
Q

Способы применения @Autowired

A
  1. Внедрение значения в поле класса;
    @Component
    public class Parrot {…}

@Component
public class Person {
@Autowired
private Parrot parrot;
}
При таком способе внедрения зависимости поле нельзя отметить как final.

  1. Внедрение значения через параметры конструктора класса;
    @Component
    public class Person {private final Parrot parrot;@Autowired
    public Person(Parrot parrot) {
    this.parrot = parrot;
    }
    }
  2. Внедрение значения через сеттер
    @Component
    public class Person {private Parrot parrot;@Autowired
    public void setParrot(Parrot parrot) {
    this.parrot = parrot;
    }
    }
    У этого способа много недостатков и лучше его не применять

Берегись циклической зависимости!

How well did you know this?
1
Not at all
2
3
4
5
Perfectly
7
Q

Proxy

A

Объекты, коммуницирующие с чем-то, что находится за пределами приложения

How well did you know this?
1
Not at all
2
3
4
5
Perfectly