Spring 源码解读(2) - Spring IOC 容器初始化的方式

IOC 定义

IOC 是控制反转,其实现方式是 DI,也就是依赖注入。在以前,对象的创建和销毁都是由用户控制的。有了 IOC 之后,这些都交给 spring 来控制,只需关心业务。
IOC 还解决了类之间的耦合性,加入A需要依赖 B 对象,在 spring 中通过在 A 类中标注@Autowired 注解引入 B 即可,B 对象内部修改了代码,A 对象是不用改动的,这也符合软件设计的开闭原则。

IOC 的实现机制是什么?

采用简单工厂模式 + 反射
在没有spring 的时候,使用 new 的方式创建对象,这样耦合度很高,因此可以采用简单工厂模式方式,对工厂方法传入一个参数,根据这个参数判断需要创建哪个对象。这种方式也会存在一个问题,要创建的对象一旦多起来,会频繁改代码,因此使用反射在工厂方法内部创建对象,用来替换new 的方式。
相当于spring 加载 xml 配置文件,然后调BeanFactory 的 getBean 方法,该方法有很多重载方法,传入一个对象的全路径。然后通过getInstance() 创建对象。

IOC的加载

IOC 的加载包括两大步骤:配置文件的注册、IOC 流程
IOC 的加载是从调用 spring 上下文的构造方法开始的

Spring 配置IOC有两种方式

一种是JavaConfig,另一种是xml方式。

  • xml 方式是 new 一个 ClassPathXmlApplicationContext,Javaconfig 方式是new 一个 AnnotationConfigApplicationContext,调用它们的有参构造方法。
public static void main(String[] args) {
	    //JavaConfig的配置方式
		AnnotationConfigApplicationContext context1 = new AnnotationConfigApplicationContext(IOCConfig.class);
		//XML的配置方式
		ClassPathXmlApplicationContext context2 = new ClassPathXmlApplicationContext("classpath:IOCConfig.xml");
}

Javaconfig 方式

@Configuration//代替了xml, 保证了baen是单例的
@ComponentScan // 默认扫描当前类所在的包
public class SpringConfig {
    @Bean // 代替了 <bean>
    public Bean2 getUserServie(){
        return new Bean2();
    }
}

xml 方式

<componment-scan  basePackage = ""  />
<bean id="" />
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值