开源框架Spring学习之道:IoC控制反转(一)

Java代码   收藏代码
  1. 开源框架Spring详解---IoC控制反转(一)  
  2.    
  3. spring在英文里有春天、弹簧、跳跃和泉眼的意思。Spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。  
  4.    
  5. Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。  
  6.   目的:解决企业应用开发的复杂性  
  7.   功能:使用基本的JavaBean代替EJB,并提供了更多的企业应用功能  
  8.   范围:任何Java应用  
  9.   简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。  
  10.   轻量——从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。  
  11.   控制反转——Spring通过一种称作控制反转(IoC)的技术促进了松耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。  
  12.   面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的——完成业务逻辑——仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。  
  13.   容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。  
  14.   框架——Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。    
  15. 所有Spring的这些特征使你能够编写更干净、更可管理、并且更易于测试的代码。它们也为Spring中的各种模块提供了基础支持。  
  16.  下面就搭建一个简单的Spring项目:  
  17. 1、首先要引入Spring的jar包。  
  18. Spring有两个jar包:  
  19. spring.jar  
  20. commons-logging.jar  
  21. 2、然后写一个xml文件,这个xml文件可以随便起名字,但是Spring的官方网站就是写的是applicationContext.xml.所以我们最好也写成application.xml  
  22.    
  23.    
  24. Xml代码    
  25. <?xml version="1.0" encoding="UTF-8"?>    
  26. <beans xmlns="http://www.springframework.org/schema/beans"    
  27.         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    
  28.         xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">    
  29.     
  30.     
  31.    <!-- 配置一个bean 指明bean id class property属性 value属性值 加载这个文件的时候 进行初始化 (需要根据bean的配置)-->    
  32.     <bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl">    
  33.          
  34.      <!-- 通过构造器参数的索引位置匹配方法 索引位置从0开始    
  35.      <constructor-arg index="0">    
  36.        <value>z_xiaofei168</value>    
  37.      </constructor-arg>    
  38.         
  39.      <constructor-arg index="1">    
  40.        <value>你好!</value>    
  41.      </constructor-arg>    
  42.          
  43.       -->    
  44.           
  45.      <!-- 通过构造器的参数类型匹配方法进行注入 -->    
  46.          
  47.         
  48.      <constructor-arg type="java.lang.String">    
  49.        <value>你好!</value>    
  50.      </constructor-arg>    
  51.          
  52.      <constructor-arg type="java.lang.String">    
  53.        <value>z_xiaofei168</value>    
  54.      </constructor-arg>    
  55.     
  56.      <!-- 通过set方法进行注入,必须在你类中有对应的set方法     
  57.       <property name="say">    
  58.           <value>你好!</value>    
  59.       </property>    
  60.       -->    
  61.     </bean>    
  62.     
  63. </beans>    
  64.    
  65.    
  66. 3、再次写service层:  
  67.    
  68.          GreetingService.java  
  69.    
  70. Java代码    
  71. package cn.csdn.service;    
  72.     
  73. public interface GreetingService {    
  74.         
  75.     public void say();    
  76.     
  77. }    
  78.    
  79. GreetingServiceImpl.java   
  80.    
  81.    
  82. Java代码    
  83. package cn.csdn.service;    
  84.     
  85. public class GreetingServiceImpl implements GreetingService {    
  86.         
  87.     /**私有属性*/    
  88.     private String say;    
  89.         
  90.     /**在定义一个私有的属性*/    
  91.     private String name;    
  92.     
  93.     /**  
  94.      * IOC依赖注入的方式  
  95.      * 2、通过构造器注入  
  96.      * */    
  97.     public GreetingServiceImpl(String name,String say){    
  98.         this.name=name;    
  99.         this.say=say;    
  100.     }    
  101.         
  102.     @Override    
  103.     public void say() {    
  104.         System.out.println("你给"+name+"打的招呼是:"+say);    
  105.     }    
  106.         
  107.     /**  
  108.      * IOC依赖注入的方式  
  109.      * 1、通过setter方法实现的  
  110.      * */    
  111.     /**set方法进行初始化的工作*/    
  112.     public void setSay(String say){    
  113.         this.say=say;    
  114.     }    
  115.         
  116. }    
  117.     
  118.    
  119.  4、最后写个测试类来测试:  
  120.    
  121. Java代码    
  122. package cn.csdn.junit;    
  123.     
  124. import org.junit.Test;    
  125. import org.springframework.context.ApplicationContext;    
  126. import org.springframework.context.support.ClassPathXmlApplicationContext;    
  127. import org.springframework.context.support.FileSystemXmlApplicationContext;    
  128.     
  129. import cn.csdn.service.GreetingService;    
  130.     
  131.     
  132. public class GreetingTest {    
  133.         
  134.     /**测试GreetingServiceImpl的方法*/    
  135.     @Test    
  136.     public void test1(){    
  137.         /**加载spring容器  可以解析多个配置文件 采用数组的方式传递*/    
  138.         ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"});    
  139.         /**IOC的控制反转体现*/    
  140.         GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");    
  141.          
  142.         greetingService.say();    
  143.     }    
  144.         
  145.     @Test    
  146.     public void test2(){    
  147.         ApplicationContext ac = new FileSystemXmlApplicationContext(new String[]{"src/applicationContext.xml"});    
  148.           /**IOC的控制反转体现*/    
  149.         GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl");    
  150.          
  151.         greetingService.say();    
  152.     }    
  153.     
  154. }    
  155.    
  156.    
  157.    
  158. 5、在控制台的显示结果是:  
  159.    
  160. 你给z_xiaofei168打的招呼是:你好!  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值