spring介紹;安裝;使用

介紹web

spring是一個輕量級的Java 開發框架。實現了 高內聚,低耦合;支持AOP(面向切面),控制反轉(IOC)也叫依賴注入(Dependency lnjection),聲明事務 整合其它ORM框架 等spring

IOC,控制反轉(依賴注入,依賴查找): 應用自己不負責依賴對象的建立及維護,依賴對象的建立及維護是由外部容器負責的,控制權就由應用轉移到了外部容器,控制權的轉移就是控制反轉。數據庫

依賴注入(Dependency lnjection) 在運行期間,由外部容器動態的將依賴對象注入到組件中數組

 bean:全部的實例,對象 在IOC容器中都能稱之爲bean安全

Spring主要的優勢
1.低侵入式設計,代碼的污染率。
2.控制反轉(Ioc)機制,也叫依賴注入(DI),下降了業務對象替換的複雜性,提升了組件之間的解耦。
3.面向切面(AOP),容許將一些通用的任務如安全、事務、日誌等進行集中式處理,從而提供了更好的複用。
4.Spring的ORM 和 DAO 提供了與第三方持久層框架的良好整合,並簡化了底層的數據庫訪問。
5.獨立於各類應用服務器,基於Spring框架的應用程序,能夠實現Write Once,Run Anywhere的承諾。
6.Spring並不強制應用徹底依賴於Spring,開發者可自由選用Spring框架的部分或所有

服務器

在pom.xml中 添加 maven依賴session

<dependencies>
     <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-context</artifactId>
        </dependency>
    <dependency>  
            <groupId>commons-logging</groupId>  
            <artifactId>commons-logging</artifactId>  
            <version>1.2</version>  
    </dependency>
</dependencies>

spring配置模板app

<?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配置文件 -->
    <bean id="方法名" class="包名.類名"></bean>
</beans>

 實例化spring容器
Spring的配置文件能夠指定多個,經過string數組傳入框架


1.在類路徑下尋找配置來實例化容器
AppplicationContext context = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});maven


2.在文件系統路徑下尋找配置文件來實例化容器
ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{"d:\\beans.xml"});

 

實例化bean
1.使用類構造器實例化
<bean id="carService" class="com.serviceImpl.CarServiceBean"></bean>

2.使用靜態工廠方法實例化
<bean id="carService2" class="test.CarServiceBeanFactory" factory-method="createCarBean"></bean>


public class CarServiceBeanFactory {
    public static CarServiceBean createCarBean(){
        return new CarServiceBean();
    }
}
3.使用實例化工廠方法實例化
<bean id="carService" class="test.CarServiceBeanFactory"></bean>
<bean id="carService3" factory-bean="carService" factory-method="createCarBean2"></bean>
    
public class CarServiceBeanFactory {
    public CarServiceBean createCarBean2(){
        return new CarServiceBean();
    }
}

 

在每一個spring IOC容器中一個bean定義只有一個對象實例。默認狀況下會在容器啓動初始化bean,
但能夠指定bean節點lazy-init="true"延遲初始化bean,這時 只有第一次獲取bean會初始化bean
若是想對全部bean都啓用應用延遲初始化,可在根節點bean設置 default-lazy-init="true"

 

bean做用域

singleton (單例模式,默認) 在整個springIOC容器中,使用singleton定義的bean將只有一個實例
prototype 原形模式,每次經過容器的getBean方法獲取prototype定義的bean,都會產生一個新的bean實例
request 對於每次HTTP請求,使用request定義的Bean都將產生一個新的實例,每次HTTP請求都將產生不一樣的Bean實例,該做用域僅在給予web的Spring ApplicationContext情形下有效
session 對於每次HTTP Session ,使用session定義的Bean都將產生一個新實例,該做用域僅在給予web的Spring ApplicationContext情形下有效
global session 每一個全局得HTTP Session對應一個Bean實例,該做用域僅在給予web的Spring ApplicationContext情形下有效

 

spring依賴注入方式:set注入,構造器注入,靜態工廠注入,實例工廠注入 (只寫用的最多的注入方式)
 set注入:

package com.dao;

public interface CarDao {
    public void append(String arg);
}
CarDao
package com.dao.Impl;

import com.dao.CarDao;

public class CarDaoImpl implements CarDao {
    //數據庫保存操做層
    public void append(String args) {
        System.out.println("CarDaoImpl"+args);
    }

}
CarDaoImpl
package com.service;

public interface CarService {
    public void add(String args);
}
CarService
package com.serviceImpl;

import com.dao.CarDao;
import com.service.CarService;

public class CarServiceImpl implements CarService {
    private CarDao carDao;
    
    public CarDao getCarDao() {
        return carDao;
    }
    //注入
    public void setCarDao(CarDao carDao) {
        this.carDao = carDao;
    }
    
    @Override
    public void add(String args) {
        // 業務操做層
        System.out.println("CarServiceImpl"+args);
        args = args+":"+this.hashCode();
        carDao.append(args);
    }

}
CarServiceImpl
package com.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.service.CarService;

public class RunTest {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        CarService carService = (CarService) context.getBean("carServer");
        carService.add("test");
        
    }
}
RunTest
<?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">
    
      <bean id="carServer" class="com.serviceImpl.CarServiceImpl">
          <property name="carDao" ref="carBean"></property>
      </bean>
    
    <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean>

</beans>
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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd">
    
      <bean id="carServer" class="com.serviceImpl.CarServiceImpl">
          <constructor-arg name="carDao" ref="carBean"></constructor-arg>
      </bean>
    
    <bean id = "carBean" class="com.dao.Impl.CarDaoImpl"></bean>

</beans>
applicationContext.xml
package com.serviceImpl;

import com.dao.CarDao;
import com.service.CarService;

public class CarServiceImpl implements CarService {
    private CarDao carDao;
    public CarServiceImpl(CarDao carDao) {
        this.carDao = carDao;
    }
/*    public CarDao getCarDao() {
        return carDao;
    }
    //注入
    public void setCarDao(CarDao carDao) {
        this.carDao = carDao;
    }
*/    
    @Override
    public void add(String args) {
        // 業務操做層
        System.out.println("CarServiceImpl"+args);
        args = args+":"+this.hashCode();
        carDao.append(args);
    }

}
CarServiceImpl

 

相關文章
相關標籤/搜索