1. 程式人生 > >@Bean的用法?@Component和@Configuration的區別?

@Bean的用法?@Component和@Configuration的區別?

@Bean是一個方法級別上的註解,主要用在@Configuration註解的類裡,也可以用在@Component註解的類裡。新增的bean的id為方法名
請看下面一段程式碼:

@Configuration
public class MyTestConfig {

@Bean
public Driver driver(){
    Driver driver = new Driver();
    driver.setId(1);
    driver.setName("driver");
    driver.setCar(car());
    return driver;
}

@Bean
public Car car(){
    Car car = new Car();
    car.setId(1);
    car.setName("car");
    return car;
}

}

測試程式碼如下

@RunWith(SpringRunner.class)
@SpringBootTest
public class TestApplicationTests {

@Autowired
private Car car;

@Autowired
private Driver driver;

@Test
public void contextLoads() {
    boolean result = driver.getCar() == car;
    System.out.println(result ? "同一個car" : "不同的car");
}

}

列印結果如下:
同一個car

替換為Component後的列印結果:

不同的car

造成不同結果的原因在ConfigurationClassPostProcessor類之中,通過呼叫enhanceConfigurationClasses方法,為被註解@Configuration的類進行CGLIB代理