1. 程式人生 > >Spring框架的概述(1)

Spring框架的概述(1)

spring

Spring是分層的JavaSE/EE full-stack(一站式) 輕量級開源框架
  • 分層:
    • SUN提供的EE的三層結構:web層、業務層、數據訪問層(持久層,集成層)
    • Struts2是web層基於MVC設計模式框架.
    • Hibernate是持久的一個ORM的框架.
  • 一站式:
    • Spring框架有對三層的每層解決方案:
    • web層:Spring MVC.
    • 持久層:JDBC Template
    • 業務層:Spring的Bean管理

Spring的核心

  • IOC:(Inverse of Control 反轉控制)
    控制反轉:將對象的創建權,交由Spring完成.
  • AOP:Aspect Oriented Programming 是 面向對象的功能延伸.不是替換面向對象,是用來解決OO中一些問題.

IOC:控制反轉.


Spring優點

  • 方便解耦,簡化開發
    • Spring就是一個大工廠,可以將所有對象創建和依賴關系維護,交給Spring管理
  • AOP編程的支持
    • Spring提供面向切面編程,可以方便的實現對程序進行權限攔截、運行監控等功能
  • 聲明式事務的支持
    • 只需要通過配置就可以完成對事務的管理,而無需手動編程
  • 方便程序的測試
    • Spring對Junit4支持,可以通過註解方便的測試Spring程序
  • 方便集成各種優秀框架
    • Spring不排斥各種優秀的開源框架,其內部提供了對各種優秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
  • 降低JavaEE API的使用難度
    • Spring 對JavaEE開發中非常難用的一些API(JDBC、JavaMail、遠程調用等),都提供了封裝,使這些API應用難度大大降低

IOC和DI(*****)區別?

IOC:控制反轉:將對象的創建權,由Spring管理.
DI:依賴註入:在Spring創建對象的過程中,把對象依賴的屬性註入到類中

  • 面向對象中對象之間的關系;
    • 依賴:
      public class A{
      private B b;
      }
    • 繼承:is a
    • 聚合:
      • 聚集:
      • 組合:

Spring框架加載配置文件

ApplicationContext 應用上下文,加載Spring 框架配置文件

  • 加載classpath:
    new ClassPathXmlApplicationContext("applicationContext.xml"); :加載classpath下面配置文件.
  • 加載磁盤路徑:
    new FileSystemXmlApplicationContext("applicationContext.xml"); :加載磁盤下配置文件.

BeanFactory與ApplicationContext區別?

ApplicationContext類繼承了BeanFactory
BeanFactory在使用到這個類的時候,getBean()方法的時候才會加載這個類
ApplicationContext類加載配置文件的時候,創建所有的類
ApplicationContext對BeanFactory提供了擴展

  • 國際化處理
  • 事件傳遞
  • Bean自動裝配
  • 各種不同應用層的Context實現
  • 早期開發使用BeanFactory.

MyEclipse配置XML提示

Window--->xml catalog--->add 找到schema的位置 ,將復制的路徑 copy指定位置,選擇schema location.

Spring的入門的程序

  • 下載Spring的開發包

https://repo.spring.io/release/org/springframework/spring/

  • spring-framework-3.2.0.RELEASE-dist.zip ---Spring開發包
    • docs :spring框架api和規範
    • libs :spring開發的jar包
    • schema :XML的約束文檔.
  • spring-framework-3.0.2.RELEASE-dependencies.zip ---Spring開發中的依賴包

開始我們第一個spring的程序

  1. 創建web工程引入相應jar包:
spring-beans-3.2.0.RELEASE.jar
spring-context-3.2.0.RELEASE.jar
spring-core-3.2.0.RELEASE.jar
spring-expression-3.2.0.RELEASE.jar
開發的日誌記錄的包:
com.springsource.org.apache.commons.logging-1.1.1.jar       --- 用於整合其他的日誌的包(類似Hibernate中slf4j)
com.springsource.org.apache.log4j-1.2.15.jar

2.創建Spring的配置文件

在src下創建一個applicationContext.xml
引入XML的約束:
找到xsd-config.html.(*****)引入beans約束:
<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">

3.在配置中配置類

<!--通過bean標簽 設置類的信息,id為類取個標識 -->
    <bean id="userService" class="cn.spring.demo1.HelloServiceimpl">
        <!-- 使用<property>標簽註入屬性 values是普通值 ref是對象-->
        <property name="info" value="依賴註入" />
    </bean>

    完整的applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
<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為類起個標識 -->
    <bean id="userService" class="cn.spring.demo1.HelloServiceimpl">
        <!-- 使用<property>標簽註入屬性 values是普通值 ref是對象-->
        <property name="info" value="依賴註入" />
    </bean>
</beans>
  1. HelloService.java
package cn.spring.demo1;

public interface HelloService {
    public void sayHello();
}

5.HelloServiceimpl..java 實現類

package cn.spring.demo1;

/**
 * @author NOP
 *
 */
public class HelloServiceimpl implements HelloService {
    private String info;

    public void setInfo(String info) {
        this.info = info;
    }

    public void sayHello() {
        // TODO Auto-generated method stub
        System.out.print("hello spring..."+info);
    }

}
  1. 編寫測試類SpringTest1.java
package cn.spring.demo1;

import org.junit.Test;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.FileSystemResource;

public class SpringTest1 {
    @Test
    // 傳統方式
    public void demo1() {
        // 造成程序緊密耦合
        HelloService helloservice = new HelloServiceimpl();
        helloservice.sayHello();
    }

        //加載classpath:new ClassPathXmlApplicationContext("applicationContext.xml");
    @Test
    public void demo2() {
        //創建一個工廠類
        //加載classpath:new ClassPathXmlApplicationContext("applicationContext.xml");
        ApplicationContext applicationcontext = new ClassPathXmlApplicationContext(
                "applicationContext.xml");// 如果不寫會去web-inf下去找applicationContext.xml

        HelloService helloservice = (HelloService)applicationcontext.getBean("userService");
        helloservice.sayHello();
    }

    //加載磁盤路徑:  new FileSystemXmlApplicationContext("applicationContext.xml");
    @Test
    public void demo3( ) {
        //創建一個工廠類
        //加載磁盤路徑:  new FileSystemXmlApplicationContext("applicationContext.xml");
        ApplicationContext applicationcontext = new FileSystemXmlApplicationContext(
                "applicationContext.xml");// 如果不寫會去web-inf下去找applicationContext.xml

        HelloService helloservice = (HelloService)applicationcontext.getBean("userService");
        helloservice.sayHello();
    }

    //BeanFactory模式
    @Test
    public void demo4(){
        //ClassPathResource
        //BeanFactory beanFactory= new XmlBeanFactory(new ClassPathResource("applicationContext.xml")); :加載classpath下面配置文件.
        BeanFactory beanFactory= new XmlBeanFactory(new FileSystemResource("applicationContext.xml"));//加載磁盤下的配置文件
        HelloService helloservice = (HelloService)beanFactory.getBean("userService");
        helloservice.sayHello();
    }
}

Spring框架的概述(1)