Spring Bean的自動裝配

/**
 * 自動裝配;
 * 		Spring利用依賴注入(DI),完成對IOC容器中中各個組件的依賴關係賦值;
 * 
 * 1)、@Autowired:自動注入:
 * 		1)、默認優先按照類型去容器中找對應的組件:applicationContext.getBean(BookDao.class);找到就賦值
 * 		2)、若是找到多個相同類型的組件,再將屬性的名稱做爲組件的id去容器中查找
 * 							applicationContext.getBean("bookDao")
 * 		3)、@Qualifier("bookDao"):使用@Qualifier指定須要裝配的組件的id,而不是使用屬性名
 * 		4)、自動裝配默認必定要將屬性賦值好,沒有就會報錯;
 * 			能夠使用@Autowired(required=false);
 * 		5)、@Primary:讓Spring進行自動裝配的時候,默認使用首選的bean;
 * 				也能夠繼續使用@Qualifier指定須要裝配的bean的名字
 * 		BookService{
 * 			@Autowired
 * 			BookDao  bookDao;
 * 		}
 * 
 * 2)、Spring還支持使用@Resource(JSR250)和@Inject(JSR330)[java規範的註解]
 * 		@Resource:
 * 			能夠和@Autowired同樣實現自動裝配功能;默認是按照組件名稱進行裝配的;
 * 			沒有能支持@Primary功能沒有支持@Autowired(reqiured=false);
 * 		@Inject:
 * 			須要導入javax.inject的包,和Autowired的功能同樣。沒有required=false的功能;
 * 		@Autowired:Spring定義的; @Resource、@Inject都是java規範
 * 	
 * 		AutowiredAnnotationBeanPostProcessor:解析完成自動裝配功能;
 * 
 * 3)、 @Autowired:構造器,參數,方法,屬性;都是從容器中獲取參數組件的值
 * 		1)、[標註在方法位置]:@Bean+方法參數;參數從容器中獲取;默認不寫@Autowired效果是同樣的;都能自動裝配
 * 		2)、[標在構造器上]:若是組件只有一個有參構造器,這個有參構造器的@Autowired能夠省略,
  * 		參數位置的組件仍是能夠自動從容器中獲取
 * 		3)、放在參數位置:
 *
 * 4)、自定義組件想要使用Spring容器底層的一些組件(ApplicationContext,BeanFactory,xxx);
 * 		自定義組件實現xxxAware;在建立對象的時候,會調用接口規定的方法注入相關組件;Aware;
 * 		把Spring底層一些組件注入到自定義的Bean中;
 * 		xxxAware:功能使用xxxProcessor;
 * 		ApplicationContextAware==》ApplicationContextAwareProcessor;
 */
@Configuration
@ComponentScan({"com.atguigu.service","com.atguigu.dao",
	"com.atguigu.controller","com.atguigu.bean"})
public class MainConifgOfAutowired {
	
	@Primary
	@Bean("bookDao2")
	public BookDao bookDao(){
		BookDao bookDao = new BookDao();
		bookDao.setLable("2");
		return bookDao;
	}
	
	/**
	 * @Bean標註的方法建立對象的時候,方法參數的值從容器中獲取
	 * @param car
	 * @return
	 */
	@Bean
	public Color color(Car car){
		Color color = new Color();
		color.setCar(car);
		return color;
	}
	

}
相關文章
相關標籤/搜索