javascript
【Spring】Spring第一天 - 环境搭建、IoC 详解、DI 详解等
一.Spring 框架簡介及官方壓縮包目錄
介紹
1.主要發(fā)明者:Rod Johnson
2.輪子理論推崇者:
2.1 輪子理論:不用重復(fù)發(fā)明輪子.
2.2 IT 行業(yè):直接使用寫好的代碼.
3.Spring 框架宗旨:不重新發(fā)明技術(shù),讓原有技術(shù)使用起來更加方便.
4.Spring 幾大核心功能
4.1 IoC/DI 控制反轉(zhuǎn)/依賴注入
4.2 AOP 面向切面編程
4.3 聲明式事務(wù).
5.Spring 框架runtime
5.1 test: spring 提供測試功能
5.2 Core Container:核心容器.Spring 啟動最基本的條件.
5.2.1 Beans : Spring 負(fù)責(zé)創(chuàng)建類對象并管理對象
5.2.2 Core: 核心類
5.2.3 Context: 上下文參數(shù).獲取外部資源或這管理注解等
5.2.4 SpEl: expression.jar
5.3 AOP: 實現(xiàn)aop 功能需要依賴
5.4 Aspects: 切面AOP 依賴的包
5.5 Data Access/Integration : spring 封裝數(shù)據(jù)訪問層相關(guān)內(nèi)容
5.5.1 JDBC : Spring 對JDBC 封裝后的代碼.
5.5.2 ORM: 封裝了持久層框架的代碼.例如Hibernate
5.5.3 transactions:對應(yīng) spring-tx.jar,聲明式事務(wù)使用.
5.6 WEB:需要 spring 完成 web 相關(guān)功能時需要.
5.6.1 例如:由 tomcat 加載 spring 配置文件時, 需要有 spring-web 包
6.Spring 框架中重要概念
6.1 容器(Container): Spring 當(dāng)作一個大容器.
6.2 BeanFactory 接口.老版本.
6.2.1 新版本中 ApplicationContext 接口,是 BeanFactory 子接口.BeanFactory 的功能在ApplicationContext 中都有.
7.從Spring3 開始把Spring 框架的功能拆分成多個jar.
7.1 Spring2 及以前就一個jar
二.IoC
1 中文名稱:控制反轉(zhuǎn)
2.英文名稱:(Inversion of Control)
3.IoC 是什么?
3.1 IoC 完成的事情原先由程序員主動通過 new 實例化對象事情,轉(zhuǎn)交給 Spring 負(fù)責(zé).
3.2 控制反轉(zhuǎn)中控制指的是:控制類的對象.
3.3 控制反轉(zhuǎn)中反轉(zhuǎn)指的是轉(zhuǎn)交給 Spring 負(fù)責(zé).
3.4 IoC 最大的作用:解耦.
3.4.1 程序員不需要管理對象.解除了對象管理和程序員之間的耦合.
三.Spring 環(huán)境搭建
1. 導(dǎo)入jar
1.1 四個核心包一個日志包(commons-logging)
2. 在src 下新建 applicationContext.xml
2.1 文件名稱和路徑自定義.
2.2 記住 Spring 容器 ApplicationContext,applicationContext.xml 配置的信息最終存儲到了AppliationContext 容器中
2.3 spring 配置文件是基于 schema
2.3.1 schema 文件擴(kuò)展名.xsd
2.3.2 把 schema 理解成 DTD 的升級版.
2.3.2.1 比 DTD 具備更好的擴(kuò)展性.
2.3.3 每次引入一個 xsd 文件是一個namespace(xmlns)
2.4 配置文件中只需要引入基本 schema
2.4.1 通過<bean/> 創(chuàng)建對象.
2.4.2 默認(rèn)配置文件被加載時創(chuàng)建對象.
3. 編寫測試方法
3.1 getBean(“<bean>標(biāo)簽id值”,返回值類型);如果沒有第二個參數(shù),默認(rèn)是Object
3.2 getBeanDefinitionNames(),獲取 Spring 容器中目前所有管理的所有對象.
四.Spring 創(chuàng)建對象的三種方式
1. 通過構(gòu)造方法創(chuàng)建
1.1 無參構(gòu)造創(chuàng)建:默認(rèn)情況.
1.2 有參構(gòu)造創(chuàng)建:需要明確配置
1.2.1 需要在類中提供有參構(gòu)造方法
1.2.2 在 applicationContext.xml 中設(shè)置調(diào)用哪個構(gòu)造方法創(chuàng)建對象
1.2.2.1 如果設(shè)定的條件匹配多個構(gòu)造方法執(zhí)行最后的構(gòu)造方法
1.2.2.2 index : 參數(shù)的索引,從0 開始
1.2.2.3 name: 參數(shù)名
1.2.2.4 type:類型(區(qū)分開關(guān)鍵字和封裝類 int 和 Integer)
2. 實例工廠
2.1 工廠設(shè)計模式:幫助創(chuàng)建類對象.一個工廠可以生產(chǎn)多個對象.
2.2 實例工廠:需要先創(chuàng)建工廠,才能生產(chǎn)對象
2.3 實現(xiàn)步驟:
2.3.1 必須要有一個實例工廠
2.3.2 在applicationContext.xml 中配置工廠對象和需要創(chuàng)建的對象
<bean id="factory" class="com.bjsxt.pojo.PeopleFactory"></bean> <bean id="peo1" factory-bean="factory" factory-method="newInstance"></bean>3. 靜態(tài)工廠
3.1 不需要創(chuàng)建工廠,快速創(chuàng)建對象.
3.2 實現(xiàn)步驟
3.2.1 編寫一個靜態(tài)工廠(在方法上添加static)
3.2.2 在 applicationContext.xml 中
<bean id="peo2" class="com.bjsxt.pojo.PeopleFactory" factory-method="newInstance"></bean>五.如何給 Bean 的屬性賦值 (注入)
1.通過構(gòu)造方法設(shè)置值.
2.設(shè)置注入(通過set 方法)
2.1 如果屬性是基本數(shù)據(jù)類型或 String 等簡單類型
等效于
<bean id="peo" class="com.bjsxt.pojo.People"><property name="id"><value>456</value></property><property name="name"><value>zhangsan</value></property> </bean>2.2 如果屬性是Set<?>集合
<property name="sets"><set><value>1</value><value>2</value><value>3</value><value>4</value></set> </property>2.3 如果屬性是List<?>
<property name="list"><list><value>1</value><value>2</value><value>3</value></list> </property>2.3.1 如果 list 中就只有一個值
<property name="list" value="1"> </property>2.4 如果屬性是數(shù)組
2.4.1 如果數(shù)組中就只有一個值,可以直接通過 value 屬性賦值
2.5 如果屬性是map
<property name="map"><map><entry key="a" value="b" ></entry><entry key="c" value="d" ></entry></map> </property>2.6 如果屬性 Properties 類型
<property name="demo"><props><prop key="key">value</prop><prop key="key1">value1</prop></props> </property>六. DI 依賴注入
1. DI:中文名稱:依賴注入
2. 英文名稱((Dependency Injection)
3. DI 是什么?
3.1 DI 和IoC 是一樣的
3.2 當(dāng)一個類(A)中需要依賴另一個類()對象時,把B 賦值給A 的過程就叫做依賴注入.
4. 代碼體現(xiàn):
<bean id="peo" class="com.bjsxt.pojo.People"><property name="desk" ref="desk"></property> </bean><bean id="desk" class="com.bjsxt.pojo.Desk"><property name="id" value="1"></property><property name="price" value="12"></property> </bean>七.使用 Spring 簡化 MyBatis
1. 導(dǎo)入 mybatis 所有 jar 和 spring 基本包,spring-jdbc,spring-tx,spring-aop,spring-web,spring 整合mybatis 的包等
2. 先配置web.xml
3. 編寫 spring 配置文件 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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!-- 數(shù)據(jù)源封裝類.配置數(shù)據(jù)庫的用戶名和密碼.數(shù)據(jù)源:獲取數(shù)據(jù)庫連接,依賴于spring-jdbc.jar --><bean id="dataSouce"class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver"></property><property name="url" value="jdbc:mysql://localhost:3306/ssm"></property><property name="username" value="root"></property><property name="password" value="smallming"></property></bean><!-- 創(chuàng)建SqlSessionFactory對象 --><bean id="factory" class="org.mybatis.spring.SqlSessionFactoryBean"><!-- 數(shù)據(jù)庫連接信息來源于dataSource --><property name="dataSource" ref="dataSouce"></property></bean><!-- 掃描器,相當(dāng)于mybatis.xml中mappers下package標(biāo)簽,掃描com.bjsxt.mapper包后會給對應(yīng)接口創(chuàng)建對象 --><bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"><!-- 要掃描哪個包 --><property name="basePackage" value="com.bjsxt.mapper"></property><!-- 和factory 產(chǎn)生關(guān)系 --><property name="sqlSessionFactory" ref="factory"></property></bean><!-- 由 spring 管理 service 實現(xiàn)類 --><bean id="airportService" class="com.bjsxt.service.impl.AirportServiceImpl"><property name="airportMapper" ref="airportMapper"></property></bean> </beans>4. 編寫代碼
4.1 正常編寫 pojo
4.2 編寫 mapper 包下時必須使用接口綁定方案或注解方案(必須有接口)
4.3 正常編寫 Service 接口和Service 實現(xiàn)類
3.3.1 需要在 Service 實現(xiàn)類中聲明 Mapper 接口對象,并生成get/set方法
4.4 spring 無法管理 Servlet ,在 service 中取出 Service 對象
總結(jié)
以上是生活随笔為你收集整理的【Spring】Spring第一天 - 环境搭建、IoC 详解、DI 详解等的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【JavaScript】请求数据时,添加
- 下一篇: 【Spring】Spring第二天 -