Я все еще изучаю внедрение весенней зависимости в глубину.
Мой первый класс — это класс конфигурации, где я объявляю контейнеру загрузку и управление bean-компонентами, объявленными в аннотированных методах.
package ioc.question_004;
import ioc.commun.Person;
import ioc.commun.Profession;
import org.springframework.context.annotation.*;
@Configuration
public class MyConfiguration {
@Bean
public Profession profession(){
return Profession.builder()
.name("professor")
.description("professor in the university")
.build();
}
@Bean
public Person person(){
return Person.builder()
.name("Bagna")
.age(52)
.profession(profession())
.build();
}
}
Мой второй класс - это daoRepository, он выглядит так:
package ioc.question_008.dao;
import ioc.commun.Person;
import lombok.*;
import org.springframework.stereotype.Repository;
import java.util.ArrayList;
import java.util.List;
@Repository
@Builder
@Setter
@Getter
@EqualsAndHashCode
@ToString
public class MyDaoRepository implements dao {
List<Person> personList = new ArrayList<>();
@Override
public boolean save( Person person ){
return this.personList.add(person);
}
@Override
public boolean delete( Person person ){
return this.personList.remove(person);
}
}
Мой рабочий код выглядит следующим образом:
@Configuration
@Import(MyConfiguration.class)
@ComponentScan(basePackageClasses = {MyDaoRepository.class} )
public class DependencyInjection {
public static void main( String[] args ) {
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(DependencyInjection.class);
dao myDaoRepository = (MyDaoRepository) context.getBean("myDaoRepository");
System.out.println(myDaoRepository);
}
}
Волшебным образом MyDaoRepository содержит человека @Bean, объявленного в классе конфигурации MyConfiguration:
MyDaoRepository (personList = [Person (имя = Багна, возраст = 52, профессия = Профессия (имя = профессор, описание = профессор в университете))])
Я думаю, что контейнер автоматически внедрил этот объект, даже если я об этом не просил. Возможно, компилятор добавил некоторую аннотацию @Autowired. Я не уверен.
Не могли бы вы объяснить мне, как я могу попросить контейнер Spring не вводить бобы, даже если они существуют в контейнере (например, человек-боб), если только я не попрошу сделать инъекцию самостоятельно с аннотацией @Autowired.
@Bean
самостоятельно. - person chrylis -cautiouslyoptimistic-   schedule 03.07.2019