spring的ioc原理

IOC,它是Inverse of Control的缩写,中文含义是控制反转,表示将对象的创建权力反转给Spring框架!!

IOC解决的问题:使用IOC可以解决的程序耦合性高的问题!!

那么什么是程序的耦合呢?
所谓的耦合:就是代码和与代码之间产生了依赖,有一种牵一发而动全身的感觉;

ioc 的控制反转的原理,本来我们所创建的对象是需要我们自己独自new的,但是ioc所依赖并不是这样的,而是通过配置,在配置中配置出我们想要创建的对象的路径,然后,通过dom4j技术将我们的xml配置文件给解析出来,通过反射技术,创建对应的对象
bean.xml配置

<?xml version="1.0" encoding="UTF-8" ?>
<bean id="userDao" class="cn.itchen.dao.impl.UserDaoImpl"></bean>

factory工厂类

public class BeanFactory {
    // 定义一个map集合来存放工厂反射生成的对象
    /*
     * 这里的方法必须是静态的方法,不然静态代码快里面就不能调用的;
     * */
    private static Map<String, Object> map = new HashMap<>();

// dom4j解析xml对象
static {
    // 创建解析配置文件的对象
    SAXReader sax = new SAXReader();
    // 获取对应的字节输入流对象将它作为参数传递到给sax进行读取
    InputStream in = BeanFactory.class.getClassLoader().getResourceAsStream("beans.xml");
    try {
        // 读取之后成为了一个文档对象;
        Document document = sax.read(in);
        // 获取xml文档对象的根节点
        Element root = document.getRootElement();
        // 根据根节点进行获取的id和class的字符串的
        String id = root.attributeValue("id");
        String clazz = root.attributeValue("class");
        // 通过反射生成对象
        Object object = Class.forName(clazz).newInstance();
        // 获取之后需要一个容器来存储,我们就选择了map容器,所以我们在外面定义了map的容器来存取,然后在下面进行键取值
        map.put(id, object);
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public static Object createUserDao(String id) {
    // 根据键取值
    Object object = map.get(id);
    return object;
}

}

获取UserDao的对象

public class UserServiceImpl implements UserService {

	private UserDao userDao = (UserDao) BeanFactory.createUserDao("userDao");
	@Override
	public void saveUser() {
		userDao.save();
	}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值