Sping进阶
目錄
- 一、Sping復習
- 1、概述
- 2、如何搭建
- 3.spring中常用的注解標簽
- 4.spring+jdbc
- 5、spring 集成 mybatis
- 6、spingMVC
- 二、sping進階
- 1、BeanFactory 和 ApplicationContext
- (1)BeanFactory 和ApplicationContext
- 2、SpringBean的生命周期
- 3、Spring中的bean是線程安全的嗎?
- 4、Bean循環依賴
- 5、Servlet的過濾器與Spring攔截器區別
- (1)區別主要在底層實現方式有所不同:
一、Sping復習
1、概述
Spring是一個輕量級Java開源工具,它是為了解決企業應用開發的復雜性而創建的,即簡化Java開發。
- 優點:sping是一個輕量級的,非侵入式的,IOC,AOP,一站式的,簡化企業級開發而生的。核心包非常小。
業務代碼中不侵入框架代碼;
IOC:控制反轉,將生成對象的權利反轉給了spring框架,依賴注入DI為屬性注入值
AOP:面向切面編程,將一些與業務代碼無關的公共部分抽取出來,使用時,通過代理對象調用,從而達到不修改源代碼的基礎上增加功能。代碼的耦合度降低。
一站式框架:數據持久層,web控制層…
2、如何搭建
3.spring中常用的注解標簽
@Component(value=“user”)
@Service
@Repository
以上注解都可以實現創建對象功能,只是為了后續擴展功能,在不同的層
使用不同的注解標記
@Scope(value=“prototype”) 原型
@Scope(value=“ singleton ”) 單例
4.spring+jdbc
jdbcTemplate 管理數據源(阿里巴巴Druid)事務管理
事務管理的最基本的原理是使用AOP,聲明式事務和編程式事務,
5、spring 集成 mybatis
Spring 集成 Mybatis 其核心是將 SqlSessionFactory 交由 Spring 管理,并由
Spring 管理對 dao 接口的代理實現。
導入mybatis jar包
(1)Spring結合mybatis插件包
(2)配置sqlSessionFactory
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="dataSource"></property> <property name="configLocation" value="mybatis-config.xml"></property> <property name="mapperLocations" value="com/ff/*Mapper.xml"> </property> </bean>(3)指定生成接口代理
<bean id="mapperFactory" class="org.mybatis.spring.mapper.MapperScannerConfigurer"> <property name="basePackage" value="com.ff.ssm.dao"></property> <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"> </property> </bean(4)在service中注入Dao代理接口,此接口有Spring代理實現
@Autowired DeptDao deptDao;6、spingMVC
springMVC詳細鏈接
二、sping進階
1、BeanFactory 和 ApplicationContext
new User( )創建了一個User對象,把由sping框架創建的對象稱為一個bean。
2. BeanFactory 接口是spring 框架中最基礎的接口,定義了如何獲取bean的方法。
3. ApplicationContext接口間接的繼承了BeanFactory接口,在此基礎之上擴展功能。
(1)BeanFactory 和ApplicationContext
2、SpringBean的生命周期
一個對象什么時候生(創建),什么時候銷毀?
- spring中的bean可能經過5個階段:
3、Spring中的bean是線程安全的嗎?
-
1.servlet是線程安全的嗎? servlet是線程不安全的
-
2.servlet是單例的還是多例的? 是單例的,在服務器啟動時由服務器創建,只創建來一個。
-
3、單例bean和單原型bean
class UserController{
User user; //單例bean 把一次請求看做是一個線程,很多個請求,那就是多個線程。多個線程共享一個
//原型bean 是每次使用時,會創建一個對象,不共享 ,是線程安全
UserService userService;
} -
4.單例bean是線程不安全的,單例bean,多個線程共享同一個。
-
5.單例bean分為:
-
(1) 有狀態bean,這個變量可以存儲數據。
-
(2) 無狀態bean ,不存儲數據的bean
-
假設UserController ,User , UserService 都是單例的。
class UserController{
User user; //User 作為數據存儲的對象,存儲對象信息的,是有狀態的,不安全的
UserService userService; //不存儲數據,是無狀態的,安全的
}
4、Bean循環依賴
此情況只在spring中出現,因為spring創建對象時,可以為屬性自動注入值,注入時就需要查找所依賴的對象。
- 解決方法:
5、Servlet的過濾器與Spring攔截器區別
(1)區別主要在底層實現方式有所不同:
-
Servlet過濾器:過濾器實現是依賴于tomcat,請求會先到達過濾器,然后進入Servlet。
-
Spring 攔截器:是框架內部封裝的,請求是先到達servlet,根據映射地址,去匹配攔截器,最終到達控制器。
總結
- 上一篇: 图解SSD不同的接口:SATA、MSAT
- 下一篇: 电子合同解决企业全程电子化的最后一公里难