Когда вы удаляете аннотацию @Configuration из класса AppConfig, вызов метода item () будет простым вызовом метода java, и вы получите новый экземпляр объекта Item, и он не останется одноточечно .
Чтобы доказать это, сначала добавьте конструктор в класс Item следующим образом:
public class Item {
...
public Item() {
System.out.println("Item instance created")
}
...
}
, а затем определите другой компонент, который будет использовать экземпляр Item, следующим образом:
public class ItemConsumer {
public ItemConsumer(Item item) {
System.out.println("ItemConsumer created");
}
}
и используйте его в качестве компонента в классе AppConfig следующим образом:
public class AppConfig {
@Bean
public Item item(){
Item item = new Item();
item.setItemNo(46789);
item.setItemName("chair");
item.setItemType("ART");
item.setItemSize("A4");
return item;
}
@Bean
public ItemConsumer itemConsumer() {
return new ItemConsumer(item());
}
}
измените ItemTest, как показано ниже:
public class ItemTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ct = new AnnotationConfigApplicationContext(AppConfig.class);
Item item = ct.getBean(Item.class);
ItemConsumer itemConsumer = ct.getBean(ItemConsumer.class);
}
}
Теперь, когда вы запускаете класс ItemTest, он генерирует следующий вывод:
Item instance created
Item instance created
ItemConsumer created
Итак, класс Item создается дважды, что означает, что он не singleton .
, теперь снова аннотируйте класс AppConfig аннотацией @Configuration и запускайте класс ItemTest.На этот раз вывод будет как ниже:
Item instance created
ItemConsumer created