Spring框架的概述(1)
阿新 • • 發佈:2018-04-25
springSpring是分層的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的程序
- 創建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>
- 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);
}
}
- 編寫測試類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)