一、说明
@Component 使用的是原来类。
@Configuration 使用代理类(当driver方法调用car方法时,其实调用的是代理类中的方法;(代理类中的car方法,会先取出spring对象工厂里的对象,然后return这个对象)。
二、案例
1、代码
Car类
public class Car {
public String name;
}
Driver类
public class Driver {
public String name;
public Car car;
}
配置类
//@Component
@Configuration
public class MyTestConfig {
@Bean
public Driver driver() {
Driver driver = new Driver();
driver.name = "driver";
driver.car = car();
System.out.println(this.getClass().getName());
return driver;
}
@Bean
public Car car() {
Car car = new Car();
car.name = "car";
System.out.println("生成一个car:" + car);
return car;
}
}
测试方法
/**
* 测试类
*/
@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests {
@Autowired
private Car car;
@Autowired
private Driver driver;
@Autowired
private MyTestConfig myTestConfig;
/**
* 测试 @Component 和 @Configuration 的区别
*/
@Test
public void contextLoads() {
boolean result = driver.car == car;
System.out.println(result ? "同一个car" : "不同的car");
boolean result2 = myTestConfig.car() == car;
System.out.println(result2 ? "同一个car" : "不同的car");
}
}
2、结果
使用 @Component :
不同的car
不同的car
使用 @Configuration :
同一个car
同一个car
参考:https://blog.csdn.net/long476964/article/details/80626930
版权声明:本文为qq_25775675原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。