Spring (1)

Spring 是一個開源的控制反轉(IoC Inversion of Control)和麪向切片(AOP)面向切面的容器框架,它的做用是簡化企業開發。html

請查詢關於反轉控制的內容。簡單來講:應用自己不負責對象的建立以及維護,對象的建立和維護是由外部容器來負責的,這樣控制權就交給了外部容器,減小了代碼之間耦合的程度。spring

舉一個代碼的例子:編程

原先建立一個類:windows

class People{api

  Man xiaoMing = new Man();框架

  public string males;ide

  public int age;測試

}操作系統

咱們實例化一個對象xiaoMing時須要在People類中new一個類,可是經過Spring容器,咱們能夠將其交給外部的XML文件來進行實例化,而在People中,咱們僅僅須要聲明一個xiaoMing對象便可。code

class Pepele{

  private Man xiaoMing;

  public string males;

  public int age;

}

新建XML配置文件:


 

 

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">

......
</beans>

能夠直接從Spring的說明文檔中複製這樣的一段代碼。

實例化Spring容器:


 

實例化Spring容器的方法有兩種ClassPathXmlApplicationContext or FileSystemXmlApplicationContext.

(1)在類路徑下尋找配置文件來實例化容器

ApplicationContext ctx =  new ClassPathXmlApplicationContext(new String[]{"bean.xml"});

(2)在文件系統下尋找配置文件來實例化容器

ApplicationContext ctx =  new FileSystemXmlApplicationContext(new String[]{"d:\\bean.xml"});

因爲windows和Linux操做系統的差異,咱們通常使用第一種方式進行實例化。

 

配置bean文件並添加類


 

 

<beans xmlns="http://www.springframework.org/schema/beans"
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns:p="http://www.springframework.org/schema/p"
     xsi:schemaLocation="http://www.springframework.org/schema/beans
     http://www.springframework.org/schema/beans/spring-beans.xsd">

 <bean id="peopleService" name="" class="org.spring.beans.PeopleService">
 </bean>

</beans>

 

public class PeopleService implements PeopleServiceInterf {
 
 /* (non-Javadoc)
  * @see org.spring.beans.PeopleServiceInterf#testBeans()
  */
 @Override
 public void testBeans(){
  System.out.println("測試是否被實例化!");
 }

}

 

測試


 

 

 @Test
 public void test() {
  //實例化Spring容器
  ApplicationContext ctx =  new ClassPathXmlApplicationContext("bean.xml");
  PeopleService peopleService = (PeopleService)ctx.getBean("peopleService");
  peopleService.testBeans();
 }

能夠看到測試結果正確,測試輸出爲 "測試是否被實例化!"

 

優缺點:


 

 

IoC最大的好處是什麼?由於把對象生成放在了XML裏定義,因此當咱們須要換一個實現子類將會變成很簡單(通常這樣的對象都是實現於某種接口的),只要修改XML就能夠了,這樣咱們甚至能夠實現對象的熱插拔(有點象USB接口和SCSI硬盤了)。另外,Spring容器還提供了AOP技術,能夠實現權限攔截,運行期監控等功能;還有就是與Hibernate和JdbcTemplate等第三方框架的整合。
 
IoC最大的缺點是什麼?(1)生成一個對象的步驟變複雜了(事實上操做上仍是挺簡單的),對於不習慣這種方式的人,會以爲有些彆扭和不直觀。(2)對象生成由於是使用反射編程,在效率上有些損耗。但相對於IoC提升的維護性和靈活性來講,這點損耗是微不足道的,除非某對象的生成對效率要求特別高。(3)缺乏IDE重構操做的支持,若是在Eclipse要對類更名,那麼你還須要去XML文件裏手工去改了,這彷佛是全部XML方式的缺憾所在。(百度百科)
相關文章
相關標籤/搜索