学习笔记-Spring实战-动手实现一个小的spring-Chapter-1
文章目录
1、思考
Spring是什么?有什么用?存储结构?
Spring是一个存放bean容器,bean即java里面的各种对象,容器即存放这些对象的地方。
有什么用,借助Spring我们在写代码需要用到一些对象的时候 不需要自己去创建,直接从spring容器中拿取即可
spring可以妥善处理好我们需要对象的生命周期(创建销毁等)以及对象的依赖的其他对象。
存储结构,既然是对象的容器,为了可以方便的获取对象 使用map来存储是最好的。
2、本章目标
简单创建一个spring的容器,可以从容器里面获取对象并且可以向容器里面注册(存放)对象
3、设计
4、实现
BeanDefinition:定义Bean的信息
package ioc;
/**
* @author LiWenQiang
* @description bean定义
* @date 2022-03-02 16:56
*/
public class BeanDefinition {
private Object bean;
public BeanDefinition(Object bean) {
this.bean = bean;
}
public Object getBean() {
return bean;
}
}
BeanFactory:Bean容器
package ioc;
import java.util.HashMap;
/**
* @author LiWenQiang
* @description
* @date 2022-03-02 16:56
*/
public class BeanFactory {
private HashMap<String,BeanDefinition> beanFactory = new HashMap<>();
public Object getBean(String beanName){
return beanFactory.get(beanName).getBean();
}
public void registBeanDefinition(String beanName,BeanDefinition beanDefinition){
beanFactory.put(beanName,beanDefinition);
}
}
Bean容器定义了Bean的注册和获取方法,Bean定义定义了对象
5、验证
package ioctest;
import ioc.BeanDefinition;
import ioc.BeanFactory;
import org.junit.Test;
/**
* @author LiWenQiang
* @description
* @date 2022-03-02 17:05
*/
public class IocTest {
@Test
public void testIOC1(){
//创建IOC容器
BeanFactory beanFactory = new BeanFactory();
//注册一个bean进去
beanFactory.registBeanDefinition("userService",new BeanDefinition(new UserService()));
//获取bean
final UserService userService = (UserService) beanFactory.getBean("userService");
//调用方法测试
userService.queryUserInfo();
}
}
class UserService {
public void queryUserInfo(){
System.out.println("查询用户信息");
}
}
输出:查询用户信息
说明可以对Bean容器进行对象注册和获取
6、遗留问题
1、没用兼容单例对象(单例对象的创建 应该要缓存起来,下次直接获取)
2、对象的创建是调用方自己创建的,这个动作应该交给容器去做