前言
学习了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
今天就写到这里,明天继续
梦里相逢不见,若知是梦何须醒。纵然梦里常幽会,怎比真如见一回。