Spring (1)

weixin_33860553發表於2014-12-05

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

請查詢關於反轉控制的內容。簡單來說:應用本身不負責物件的建立以及維護,物件的建立和維護是由外部容器來負責的,這樣控制權就交給了外部容器,減少了程式碼之間耦合的程度。

舉一個程式碼的例子:

原先建立一個類:

class People{

  Man xiaoMing = new Man();

  public string males;

  public int age;

}

我們例項化一個物件xiaoMing時需要在People類中new一個類,但是通過Spring容器,我們可以將其交給外部的XML檔案來進行例項化,而在People中,我們僅僅需要宣告一個xiaoMing物件即可。

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方式的缺憾所在。(百度百科)

相關文章