javascript
【Spring】Spring第三天 - 声明式事务、常用注解、Ajax 复习
一.自動注入
1.在Spring 配置文件中對象名和ref=”id” . id 名相同,使用自動注入,可以不配置<property/>
2.兩種配置辦法
2.1 在<bean>中通過autowire=””配置,只對這個(gè)<bean>生效
2.2 在<beans>中通過default-autowire=””配置,表當(dāng)當(dāng)前文件中所有<bean>都是全局配置內(nèi)容
3.autowire=”” 可取值
3.1 default: 默認(rèn)值,根據(jù)全局default-autowire=””值.默認(rèn)全局和局部都沒有配置情況下,相當(dāng)于no
3.2 no: 不自動注入
3.3 byName: 通過名稱自動注入.在 Spring 容器中找類的 id
3.4 byType: 根據(jù)類型注入.
3.4.1 spring 容器中不可以出現(xiàn)兩個(gè)相同類型的<bean>
3.5 constructor: 根據(jù)構(gòu)造方法注入.
3.5.1 提供對應(yīng)參數(shù)的構(gòu)造方法(構(gòu)造方法參數(shù)中包含注入對象)
3.5.2 底層使用byName, 構(gòu)造方法參數(shù)名和其他<bean>的id相同.
二. Spring 中加載 properties 文件
1. 在 src 下新建 xxx.properties 文件
2. 在spring 配置文件中先引入xmlns:context,在下面添加
2.1 如果需要記載多個(gè)配置文件逗號分割
3. 添加了屬性文件記載,并且在<beans>中開啟自動注入注意的地方
3.1 【注意】由于自動注入的優(yōu)先級別較高,ref影響了bean的加載順序,所以SqlSessionFactoryBean 的id不能叫做sqlSessionFactory,否則,會由于錯(cuò)誤的加載順序?qū)е录虞d不到配置文件報(bào)錯(cuò)
3.2 修改
3.2.1 把原來通過ref 引用替換成value 賦值,自動注入只能影響ref,不會影響value 賦值
4. 在被Spring 管理的類中通過@Value(“${key}”)取出 properties 中內(nèi)容
4.1 添加注解掃描
4.2 在類中添加@Value,示例如下:
4.2.1 key 和變量名可以不相同
4.2.2 變量類型任意,只要保證 key 對應(yīng)的 value 能轉(zhuǎn)換成這個(gè)類型就可以.
三.scope 屬性
1. <bean>的屬性
2. 作用:控制對象有效范圍(單例,多例等)
3. <bean/>標(biāo)簽對應(yīng)的對象默認(rèn)是單例的.
3.1 無論獲取多少次,都是同一個(gè)對象
4. scope 可取值如下:
4.1 singleton 默認(rèn)值,單例(常用)
4.2 prototype 多例,每次獲取重新實(shí)例化(常用)
4.3 request 每次請求重新實(shí)例化
4.4 session 每個(gè)會話對象內(nèi),對象是單例的.
4.5 application 在 application 對象內(nèi)是單例
4.6 global session spring 推出的一個(gè)對象, 依賴于 spring-webmvc-portlet ,類似于 session
四.單例設(shè)計(jì)模式
1. 作用: 在應(yīng)用程序有保證最多只能有一個(gè)實(shí)例.
2. 好處:
2.1 提升運(yùn)行效率.
2.2 實(shí)現(xiàn)數(shù)據(jù)共享. 案例: application 對象
3. 懶漢式
3.1 對象只有被調(diào)用時(shí)才去創(chuàng)建.
3.2 示例代碼
3.3 由于添加了鎖,所以導(dǎo)致效率低.
4. 餓漢式
4.1 解決了懶漢式中多線程訪問可能出現(xiàn)同一個(gè)對象和效率低問題
五. 聲明式事務(wù)
1.編程式事務(wù):
1.1 由程序員編程事務(wù)控制代碼.
1.2 OpenSessionInView 編程式事務(wù)
2.聲明式事務(wù):
2.1 事務(wù)控制代碼已經(jīng)由spring 寫好.程序員只需要聲明出哪些方法需要進(jìn)行事務(wù)控制和如何進(jìn)行事務(wù)控制.
3.聲明式事務(wù)都是針對于 ServiceImpl 類下方法的.
4.事務(wù)管理器基于通知(advice)的.
5.在spring 配置文件中配置聲明式事務(wù)
<context:property-placeholder location="classpath:db.properties,classpath:second.properties" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="${jdbc.driver}"></property><property name="url" value="${jdbc.url}"></property><property name="username" value="${jdbc.username}"></property><property name="password" value="${jdbc.password}"></property> </bean> <!-- spring-jdbc.jar 中 --> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"><property name="dataSource" ref="dataSource"></property> </bean> <!-- 配置聲明式事務(wù) --> <tx:advice id="txAdvice" transaction-manager="txManager"><tx:attributes><!-- 哪些方法需要有事務(wù)控制 --><!-- 方法以ins 開頭事務(wù)管理 --><tx:method name="ins*" /><tx:method name="del*" /><tx:method name="upd*" /><tx:method name="*" /></tx:attributes> </tx:advice> <aop:config><!-- 切點(diǎn)范圍設(shè)置大一些 --><aop:pointcut expression="execution(* com.bjsxt.service.impl.*.*(..))" id="mypoint" /><aop:advisor advice-ref="txAdvice" pointcut-ref="mypoint" /> </aop:config>六.聲明式事務(wù)中屬性解釋
1. name=”” 哪些方法需要有事務(wù)控制
1.1 支持*通配符
2. readonly=”boolean” 是否是只讀事務(wù).
2.1 如果為true,告訴數(shù)據(jù)庫此事務(wù)為只讀事務(wù).數(shù)據(jù)庫層面的優(yōu)化,會對性能有一定提升,所以,只要是(只進(jìn)行)查詢操作的方法,建議使用此配置.
2.2 如果為false(默認(rèn)值),事務(wù)需要提交的事務(wù).建議在需要進(jìn)行新增,刪除,修改的操作中使用此配置.
3. propagation 控制事務(wù)傳播行為.
3.1 當(dāng)一個(gè)具有事務(wù)控制的方法被另一個(gè)有事務(wù)控制的方法調(diào)用后,需要如何管理事務(wù)(新建事務(wù)?在事務(wù)中執(zhí)行?把事務(wù)掛起?報(bào)異常?)
3.2 REQUIRED (默認(rèn)值): 如果當(dāng)前有事務(wù),就在事務(wù)中執(zhí)行,如果當(dāng)前沒有事務(wù),新建一個(gè)事務(wù).
3.3 SUPPORTS:如果當(dāng)前有事務(wù)就在事務(wù)中執(zhí)行,如果當(dāng)前沒有事
務(wù),就在非事務(wù)狀態(tài)下執(zhí)行.
3.4 MANDATORY:必須在事務(wù)內(nèi)部執(zhí)行,如果當(dāng)前有事務(wù),就在事務(wù)中執(zhí)行,如果沒有事務(wù),報(bào)錯(cuò).
3.5 REQUIRES_NEW:必須在事務(wù)中執(zhí)行,如果當(dāng)前沒有事務(wù),新建事務(wù),如果當(dāng)前有事務(wù),把當(dāng)前事務(wù)掛起.
3.6 NOT_SUPPORTED:必須在非事務(wù)下執(zhí)行,如果當(dāng)前沒有事務(wù),正常執(zhí)行,如果當(dāng)前有事務(wù),把當(dāng)前事務(wù)掛起.
3.7 NEVER:必須在非事務(wù)狀態(tài)下執(zhí)行,如果當(dāng)前沒有事務(wù),正常執(zhí)行,如果當(dāng)前有事務(wù),報(bào)錯(cuò).
3.8 NESTED:必須在事務(wù)狀態(tài)下執(zhí)行.如果沒有事務(wù),新建事務(wù),如果當(dāng)前有事務(wù),創(chuàng)建一個(gè)嵌套事務(wù).
4. isolation=”” 事務(wù)隔離級別
4.1 在多線程或并發(fā)訪問下如何保證訪問到的數(shù)據(jù)具有完整性的.
4.2 臟讀:
4.2.1 一個(gè) 事務(wù)(A) 讀取到另一個(gè) 事務(wù)(B) 中未提交的數(shù)據(jù),另一個(gè)事務(wù)中數(shù)據(jù)可能進(jìn)行了改變,此時(shí) A 事務(wù)讀取的數(shù)據(jù)可能和數(shù)據(jù)庫中數(shù)據(jù)是不一致的,此時(shí)認(rèn)為數(shù)據(jù)是臟數(shù)據(jù),讀取臟數(shù)據(jù)過程叫做臟讀.
4.3 不可重復(fù)讀:
4.3.1 主要針對的是某行數(shù)據(jù).(或行中某列)
4.3.2 主要針對的操作是修改操作.
4.3.3 兩次讀取在同一個(gè)事務(wù)內(nèi)
4.3.4 當(dāng) 事務(wù)A 第一次讀取事務(wù)后,事務(wù)B 對事務(wù)A 讀取的數(shù)據(jù)進(jìn)行修改, 事務(wù)A 中再次讀取的數(shù)據(jù)和之前讀取的數(shù)據(jù)不一致,過程不可重復(fù)讀.
4.4 幻讀:
4.4.1 主要針對的操作是新增或刪除
4.4.2 兩次事務(wù)的結(jié)果.
4.4.3 事務(wù)A 按照特定條件查詢出結(jié)果, 事務(wù)B 新增了一條符合條件的數(shù)據(jù). 事務(wù)A 中查詢的數(shù)據(jù)和數(shù)據(jù)庫中的數(shù)據(jù)不一致的, 事務(wù)A 好像出現(xiàn)了幻覺,這種情況稱為幻讀.
4.5 DEFAULT: 默認(rèn)值,由底層數(shù)據(jù)庫自動判斷應(yīng)該使用什么隔離界別
4.6 READ_UNCOMMITTED: 可以讀取未提交數(shù)據(jù),可能出現(xiàn)臟讀,不重復(fù)讀,幻讀.
4.6.1 效率最高.
4.7 READ_COMMITTED:只能讀取其他事務(wù)已提交數(shù)據(jù).可以防止臟讀,可能出現(xiàn)不可重復(fù)讀和幻讀.
4.8 REPEATABLE_READ: 讀取的數(shù)據(jù)被添加鎖,防止其他事務(wù)修改此數(shù)據(jù),可以防止不可重復(fù)讀.臟讀,可能出現(xiàn)幻讀.
4.9 SERIALIZABLE: 排隊(duì)操作,對整個(gè)表添加鎖.一個(gè)事務(wù)在操作數(shù)據(jù)時(shí),另一個(gè)事務(wù)等待事務(wù)操作完成后才能操作這個(gè)表.
4.9.1 最安全的
4.9.2 效率最低的.
5. rollback-for=”異常類型全限定路徑”
5.1 當(dāng)出現(xiàn)什么異常時(shí)需要進(jìn)行回滾
5.2 建議:給定該屬性值.
5.2.1 手動拋異常一定要給該屬性值.
6. no-rollback-for=””
6.1 當(dāng)出現(xiàn)什么異常時(shí)不滾回事務(wù).
程序執(zhí)行過程中,遇到錯(cuò)誤需要處理時(shí),不一定是返回null,還可以拋異常進(jìn)行終止。
而且《代碼整潔之道》中推薦,用拋異常代替返回null值來處理。
七. Spring 中常用注解.
面試提問:你用過Spring的那些注解?
1. @Component 創(chuàng)建類對象,相當(dāng)于配置<bean/>
2. @Service 與@Component 功能相同.
2.1 寫在ServiceImpl 類上.
3. @Repository 與@Component 功能相同.
3.1 寫在數(shù)據(jù)訪問層類上.
4. @Controller 與@Component 功能相同.
4.1 寫在控制器類上.
5. @Resource(不需要寫對象的get/set)
5.1 java 中的注解
5.2 默認(rèn)按照byName 注入,如果沒有名稱對象,按照byType 注入
5.2.1 建議把對象名稱和 spring 容器中對象名相同
6. @Autowired(不需要寫對象的get/set)
6.1 spring 的注解
6.2 默認(rèn)按照byType 注入.
7. @Value() 獲取 properties 文件中內(nèi)容
8. @Pointcut() 定義切點(diǎn)
9. @Aspect() 定義切面類
10. @Before() 前置通知
11. @After 后置通知
12. @AfterReturning 后置通知,必須切點(diǎn)正確執(zhí)行
13. @AfterThrowing 異常通知
14. @Arround 環(huán)繞通知
八. Ajax 復(fù)習(xí)
1. 標(biāo)準(zhǔn)請求響應(yīng)時(shí)瀏覽器的動作(同步操作)
1.1 瀏覽器請求什么資源,跟隨顯示什么資源
2. ajax:異步請求.
2.1 局部刷新,通過異步請求,請求到服務(wù)器資源數(shù)據(jù)后,通過腳本修改頁面中部分內(nèi)容.
3. ajax 由javascript 推出的.
3.1 由 jquery 對 js 中 ajax 代碼進(jìn)行的封裝,達(dá)到使用方便的效果.
4. jquery 中 ajax 分類(簡化程度分為三個(gè)層級)
4.1 第一層級,較復(fù)雜:$.ajax({ 屬性名:值,屬性名:值})
4.1.1 是 jquery 中功能最全的.代碼寫起來相對最麻煩的.
4.1.2 示例代碼
4.2 第二層級,(簡化$.ajax)
4.2.1 $.get(url,data,success,dataType))
4.2.2 $.post(url,data,success,dataType)
4.3 第三層級,(簡化$.get())
4.3.1 $.getJSON(url,data,success). 相當(dāng)于設(shè)置$.get 中dataType=”json”
4.3.2 $.getScript(url,data,success) 相當(dāng)于設(shè)置$.get 中 dataType=”script”
5. 如果服務(wù)器返回?cái)?shù)據(jù)是從表中取出.為了方便客戶端操作返回的數(shù)據(jù),服務(wù)器端返回的數(shù)據(jù)設(shè)置成json
5.1 客戶端把 json 當(dāng)作對象或數(shù)組操作.
6. json:數(shù)據(jù)格式.
6.1 JsonObject : json 對象,理解成 java 中對象
6.2 JsonArray: json 數(shù)組
[{“key1”:value1,”key2”:value2},{}]總結(jié)
以上是生活随笔為你收集整理的【Spring】Spring第三天 - 声明式事务、常用注解、Ajax 复习的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Spring】Spring第二天 -
- 下一篇: 【SpringBoot】SpringBo