Spring框架之个人理解(建议收藏)
关于Spring的简介,我在这里就不描述了。直接上干货:它最核心的理念是Ioc(控制翻转)和AOP(面向切面变成),其中IOC是Spring的基础,而AOP则是其最重要的功能,最为典型的当属数据库事务的使用。
1.Spring IoC概述
控制反转是一个比较抽象的概念,对于初学者不好理解。我们举例说明,比如在现实生活当中,人们在需要一样东西,我们的基本想法就是找东西。比如我们想喝橙子,在没有饮品店的时候。我们最直观的想法就是做一杯橙子(需要水,果汁机,糖,橙子),注意这是你自己主动创造一杯橙汁的过程。然而到今时今日饮品店盛行的时代,就没有必要自己去手动做橙汁了。想喝橙汁直接打个电话联系到饮品店然后下单你想要什么口味的橙汁就行了。过会就会有人送上门。这只是举了一个很简单的例子,但这个例子当中包含了控制反转的思想,在一个团队当中是由许多开发者组成。假设你现在在一个电商网站负责开发工作,你熟悉商品交易流程,但是对财务却不怎么熟悉。而团队中有些成员对财务处理很熟悉,在商品交易流程需要调度财务的相关接口才能实现。
那么你应该会想:
1. 熟悉财务的同事开发对应的接口;
2.自己请力亲去学习财务处理然后开发对应的接口;
其实这就完全可以刚刚举例的橙汁例子进行类比,橙汁就等同与财务接口。而熟悉财务的同事等同与饮品店。根据你描述的橙汁的要求,联系方式,送货上门的地址。就等同获取财务接口实例的描述。虽然你没有主动去处理开发对应的财务接口,把主动权交给了同事,这就是控制反转的概念。 为了更好的阐述上面的抽象描述,用java代码形式模拟主动创建和别动创建的过程。
2.主动创建对象
我需要一杯橙汁 原料:橙子 ,糖 ,水; 搅拌机是工具
package com.spring.chapter; /** * * @author Administrator * 水果搅拌机 */ public class Blender { public String mix(String water,String fruit,String sugar){ String juice="这是一杯由液体:"+water+"\n 水果:"+fruit+"\n 糖量:"+sugar+"\n组成的果汁"; return juice; } }
package com.spring.chapter; /** * * @author Administrator 果汁生成器 */ public class JuiceMaker { private Blender blender = null;// 搅拌机 private String water;// 水 private String fruit;// 水果 private String sugar;// 糖分 // 创建搅拌机对象,传出水果等参数 public String makeJuice() { blender = new Blender(); return blender.mix(water, fruit, sugar); } }
主动创造橙汁,需要我们自己熟悉可能不太熟悉的工作——如何搅拌橙汁。所以在现实中一个复杂的系统面对着成百上千中情况。如果都需要这样维护,那么回十分复杂。有些东西我们并不需要知道过程,只需要获得最后的结果。正如果汁那样,接下来看看被动创建对象。
3.被动创建对象(Spring 第一个程序)
我们已经有了果汁制造机,那么只需要对其进行描述就可以得到果汁了。
步骤如下:
1.在你项目工程中导入Spring初始化所需要的jar包 ——右击Build Path ,src下创建一个spring包,在包中创建一个叫spring.XML文件。
2.在xml文件中导入spring所需要的头信息 ,以及创建bean进行描述。
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <!-- 当 Spring 应用程序被加载到内存中时,框架利用了上面的配置文件来创建所有已经定 义的 beans,并且按照 标签的定义为它们分配一个唯一的 ID。你可以使用 标签来传递在创建对象时使用不同变量的值。 --> <!-- 用于给不同的 bean 分配唯一的 ID,并且控制不同值的对象的创建 --> <!-- class代表水果生成器,填入类路径 --> <bean id="JuiceMakerBean" class="com.spring.chapter.JuiceMaker"> <!-- 给水果赋值,进行描述 依次如下 --> <property name="water" value="5g" /> <property name="fruit" value="橙子" /> <property name="sugar" value="3g" /> </bean> <bean id="BlenderBean" class="com.spring.chapter.Blender"> <property name="juiceMaker" ref="JuiceMakerBean"></property> </bean> </beans>
3.在pojo对象文件和搅拌机中给属性创建get,set方法(注意搅拌机中的类属性也要set,get)
package com.spring.chapter; /** * * @author Administrator 果汁生成器 */ public class JuiceMaker { private String water;// 水 private String fruit;// 水果 private String sugar;// 糖分 public String getWater() { return water; } public void setWater(String water) { this.water = water; } public String getFruit() { return fruit; } public void setFruit(String fruit) { this.fruit = fruit; } public String getSugar() { return sugar; } public void setSugar(String sugar) { this.sugar = sugar; } }
package com.spring.chapter; /** * * @author Administrator 水果搅拌机 */ public class Blender { public JuiceMaker getJuiceMaker() { return juiceMaker; } public void setJuiceMaker(JuiceMaker juiceMaker) { this.juiceMaker = juiceMaker; } private JuiceMaker juiceMaker = null; public String mix() { String juice = "这是一杯由:" + "\n 水果:" + juiceMaker.getFruit() + "\n 糖量:" + juiceMaker.getSugar() + "\n 水量:" + juiceMaker.getWater() + "\n组成的果汁"; return juice; } }
4. 创建Main类以及进行最后的测试
package com.spring.chapter; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * * @author Administrator * 通过classpathxmlapplicontext加载bean文件并获取对象调用其方法 */ public class Main { public static void main(String[] args) { //创建应用程序的上下文,加载 beans 的配置文件 ApplicationContext applicationContext=new ClassPathXmlApplicationContext("spring_xml/spring.xml"); //获得指定的 bean。这个方法使用 bean 的 ID 返回一个最终可以转换为实际对象的通用对象 Blender blender=(Blender) applicationContext.getBean("BlenderBean"); System.out.println(blender.mix()); } }
结果:
这个案例的源码: https://files.cnblogs.com/files/ysource/springdome.rar
案例中的spring初始jar包:https://files.cnblogs.com/files/ysource/spring%E5%88%9D%E5%A7%8B%E5%8C%96jar.rar