Why Spring
Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
个人总结
什么是IOC
IOC(Inversion of Control)控制反转,把创建对象的权利交给框架。
个人理解:找工作的时候,我们都知道投完简历之后,我们不用给中介公司打电话,如果我们简历他们满意的话公司会给我们打电话的。公司有着对录用与否的绝对控制,我们只能等待。我们就相当于一个个的Java Class,一开始的时候都是自己找工作的,后来有了中介公司,所有的事都由中介公司来搞定,于是控制就翻转了
面向对象编程用Class来对现实世界抽象,运行的时候这些类会实例化为对象。
Teacher t = new Teacher();
业务变复杂了,抽象出People类
People p1 = new Teacher();
People p2 = new Student();
...
这时候想根据用户的参数来创建对象
public class PeopleFactory{
private People p = null;
People create(String p){
if(p=="Teacher"){
p = new Teacher();
}else if(p == "Student"){
p = new Student();
}
return p;
}
}
如果这时候还要增加一个People的子类还需要修改上面这个方法,其实上面这就是一个简单工厂,但是还没有完全的解除依赖
//在上面的类里增加一个方法
public void setPeople(People p){
this.p = p;
}
//把People 换成抽象类或接口这就是典型的面向接口编程,而不是对实现编程
业务逻辑这时候更复杂了,人要上网,要吃饭等等
//上面是设置的是人类,还需要进行下面的设置
**.setComputer(ComputerInterface c);
**.setFood(FoodAbstractClass f);
**.setProt(NetPInterface n);
...
随着系统的复杂度增加上面的东西越来越多,这样的代码也越来越多,变得很难维护,这时候有一种东西刚好能把这些依赖关系统一维护,那就是XML
<beans>
<bean id="people" class="com.live.People" scope="property">
<property name="computer" ref="computer"/>
<property name="food" ref="food"/>
<property name="net" ref="net"/>
</bean>
</beans>
xml有了之后再有一个xml解析器(XmlAppContext)就能完美解决了:
解析xml,获取元素——>通过反射,调用set方法把实例注入——>然后就可以自己组合逻辑让程序运行了。
什么是Aop
Aop(Aspect Oriented Programming)面向切面编程