springioc原理及实现

springioc原理及实现

springIoc 原理

spring重要的两大特性: ioc aop
ioc 又称控制反转

什么是控制反转呢?

如 A类 需要引用B类,而传统的做法,就是在A类中 用new 或者Java反射的方法去实例化B类,然后去应用B对象做一些需要的事情,这样的做法使A类与B类强耦合在一起。不利于代码的开发与维护。因此诞生了ioc 这种思想(1996)就是将这种引用关系,交给ioc容器帮你管理,由以前的主动引用创建变为被动引用创建,有ioc容器帮你搞定。

为什么要提到工厂模式呢?

所有的class都交给ioc容器去管理,ioc容器就想一个工厂一样,你需要什么样的bean他就会帮你去创建什么样bean 因此,在这种情景下,那么beanfactory的创建就是用了工厂模式。demo实例:

public Object getBean(String beanName) {
		Object reObject = null;
		try {
			Class class1 = Class.forName(beanName);
			try {
				Constructor declaredConstructor = class1.getDeclaredConstructor();
				try {
					reObject = declaredConstructor.newInstance();
					Field[] fields = class1.getDeclaredFields();
					for (int i = 0; i < fields.length; i++) {
						DapengAop annotation = fields[i].getDeclaredAnnotation(DapengAop.class);
						if (annotation != null) {
							Object bean = getBean(fields[i].getType().getName());
							if(!fields[i].isAccessible()) fields[0].setAccessible(true);
							fields[i].set(reObject, bean);
						}
					}
				} catch (InstantiationException | IllegalAccessException | IllegalArgumentException
						| InvocationTargetException e) {
					e.printStackTrace();
				}
			} catch (NoSuchMethodException | SecurityException e) {
				e.printStackTrace();
			}

		} catch (ClassNotFoundException e) {
			e.printStackTrace();
		}
		return reObject;
	}

那么怎样去实例化bean的呢?

java的反射机制

如果你用的是 xml配置的方式 那么他就会读取xml配置文件到conext中然后根据xml中配置的bean将其实例化。注解的方式,开启注解扫描的文件路径,开启注解。然后同样通过java反射将相应的bean实例化。编码的方式也是一样。

说道ioc不得不说一下 “依赖注入”

比如,我们上面所说的A类引用B类,那么A类依赖B类,怎么样将B类注入到A类中去的呢,
有常用几种方式: 构造注入(通过构造器注入)、设置注入(set、get);
@autowire、@resoucre 同样也是通过加载到class文件去扫描注解遇到这些注解就通过递归的方式,将相应的应用实例化。

需要注意的地方

applicationContext spring容器的上下文件 可以获取ioc容器中的bean 通过getbean(),是不是似曾相识。可以通过实现 ApplicationContextAware接口去获取applicationContext上下文。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值