gpt4 book ai didi

spring - @configuration在spring中的实际用法是什么?

转载 作者:行者123 更新时间:2023-12-02 22:02:57 25 4
gpt4 key购买 nike

我只是想知道为什么即使我不在 AppConfig 类上使用 @Configuration 注释,下面的程序仍然可以工作。您能让我知道它是如何工作的吗?

案例1:

AppConfig.java(带@Configuration)

@Configuration
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;
}
}

项目.java

public class Item {

int itemNo;
String itemName;
String itemType;
String itemSize;
public int getItemNo() {
return itemNo;
}
public void setItemNo(int itemNo) {
this.itemNo = itemNo;
}
public String getItemName() {
return itemName;
}
public void setItemName(String itemName) {
this.itemName = itemName;
}
public String getItemType() {
return itemType;
}
public void setItemType(String itemType) {
this.itemType = itemType;
}
public String getItemSize() {
return itemSize;
}
public void setItemSize(String itemSize) {
this.itemSize = itemSize;
}
}

ItemTest.java

public class ItemTest {
public static void main(String[] args) {
AnnotationConfigApplicationContext ct = new AnnotationConfigApplicationContext(AppConfig.class);
Item item = ct.getBean(Item.class);
System.out.println(item.getItemNo());

}
}

案例2:

AppConfig.java(不带@Configuration)

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;
}
}

最佳答案

当您从 AppConfig 类中删除 @Configuration 注释时,调用 item() 方法将是一个普通的 java 方法调用,您将获得一个 Item 的新实例,并且它不会保留>单例

为了证明这一点,首先向 Item 类添加一个构造函数,如下所示:

public class Item {
...
public Item() {
System.out.println("Item instance created")
}
...
}

然后定义另一个将使用 Item 实例的 bean,如下所示:

public class ItemConsumer {

public ItemConsumer(Item item) {
System.out.println("ItemConsumer created");
}

}

并将其用作 AppConfig 类中的 bean,如下所示:

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 类实例化了两次,这意味着它不是单例

现在再次使用 @Configuration 注释来注释 AppConfig 类并运行 ItemTest 类。这次输出将如下所示:

Item instance created
ItemConsumer created

关于spring - @configuration在spring中的实际用法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53591892/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com