----微信公众号更详细噢:
这篇是spring的第一篇文章,我们先来了解一下spring。
(来源百度百科:)
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
可以看到,spring是一个轻量级的开源框架。
主要核心是:
- 控制反转(Ioc)
- 面向切面(AOP)
本文主要将控制反转底层原理。
要讲底层原理,就得知道ioc到底是什么!我们继续看百度百科:
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
是不是有点迷惑,感觉没看懂,别急,看我慢慢打出来。
比如有一个类,类中有一个非静态方法,我们调用这个类里面的方法,是通过创建这个类的对象,使用对象调用方法,创建对象过程是new一个对象。控制反转则是把对象不通过new的方式实现,而是交给spring配置创建类对象。
Spring 的ioc 操作:
- 把对象的创建交给spring来进行管理。
- co的操作可以是配置文件方式,也可是注解的方式(后面讲)。
ioc底层原理
底层原理技术:
- xml配置文件,
- dom4j解决xml,
- 工厂设计模式,
- 反射。
原理:
比如我们有一个用户类,我们要servlet中调用类里面的方法,我们可以通过创建这个对象,然后调用方法:
可以发现有一个缺陷就是耦合度太高了!!!!
因为如果我们的User类变了,创建的类和调用方法也发生改变。
于是有了一个通过工厂模式来解耦合操作:
其实,可以发现这样也不是最优的解决方法!!因为在工厂中通过方法返回来创建类的,显然servet与工厂又产生 耦合!!!!
那么要什么才是最优解决方法呢??看下面??
我们通过在servlet中new创建得到!!
现在-------------
我们可以这么做:
创建xml配置文件,配置创建对象类
创建工厂类,使用dom4j解析配置文件+反射public static UserService getService(){
//1.使用dom4j 解析xml文件
//根据id值userService,得到id对应class 属性值
String classValue = “class属性值”;
//2.使用反射创建类对象
Class c = Class.forName(classValue);
//创建类对象
UserService service = c.newInstance();
return service;
}
上面就是主要的原理了