前言
學習了spring已經一年了,今天再加深一下理解。
課程目錄
IOC(Inversion of Control):控制反轉,依賴注入
- 控制是什麼?
控制對象的反轉和銷燬
- 反轉是什麼?
將對象的控制權交給IOC容器
在spring之前(如果張三要坐車回家)
- 實現自己的IOC
public class IocContainer {
private Map<String,Object> beans = new ConcurrentHashMap<String, Object>();
/***
* 根據beanId獲取bean
* @param beanId
* @return
*/
public Object getBean(String beanId){
return beans.get(beanId);
}
public void setBean(Class<?> clazz, String beanId, String ... paramBeanIds){
//初始化一個value數組
Object[] paramValues = new Object[paramBeanIds.length];
//給每個paramValues賦值
for (int i = 0; i < paramValues.length; i++) {
paramValues[i] = beans.get(paramBeanIds[i]);
}
//調用構造方法實例化bean
for (Constructor<?> constructor : clazz.getConstructors()) {
Object bean = null;
try {
bean= constructor.newInstance(paramValues);
} catch (InstantiationException e) {
} catch (IllegalAccessException e) {
} catch (InvocationTargetException e) {
}
if (bean == null){
throw new RuntimeException("實例化bean失敗");
}
//把bean放入容器中
beans.put(beanId,bean);
}
}
}
spring
- spring ioc初體驗
使用spring實例化bean
- 使用構造方法shi實例化bean
- 通過靜態方法實例化bean
- 通過實例化方法實例化bean
給bean起別名
- 在配置文件中bean有一個
name
屬性,使用該屬性能夠起別名
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="bean1" class="com.wangyu.spring.Bean1" name="bean1-1,bean1-2">
</bean>
</beans>
注入bean的方法
這裏構造方法注入和set方法注入就不做詳細介紹了,這裏強調一下構造方法注入和set方法注入的簡便寫法。
添加頭文件
xmlns:c="http://www.springframework.org/schema/c"
xmlns:p="http://www.springframework.org/schema/p"
之後我們就可以這麼使用了
<bean id="car" class="com.wangyu.domain.Car" c:color="綠色" c:name="保時捷"/>
<bean id="man" class="com.wangyu.domain.Man" p:car-ref="car" p:name="小黑"/>
是不是方便很多呢
複習:
- 通過構造方法注入bean
- 通過set方法注入
- 集合類型的注入
- 注入內部bean
github地址:https://github.com/1721461351/spring_study
今天就寫到這裏,明天繼續
夢裏相逢不見,若知是夢何須醒。縱然夢裏常幽會,怎比真如見一回。