@Bean的用法?@Component和@Configuration的區別?
阿新 • • 發佈:2018-12-17
@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代理