您好,登錄后才能下訂單哦!
我最近才整合完SSM。
前段時間,分開學習了這三個框架,都是看某黃埔軍校的視頻,整合的部分沒看視頻,想自己做。
但是有一些部分自己沒有能完成,主要是如何從spring容器里取出ApplicationContext,這個我的實現比較low,看了看講義,才OK的。
我的實現:
[java] view plain copy
WebApplicationContext acc = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
ls = (LoginService) acc.getBean("MyService");
而講義上的實現:
[java] view plain copy
@Autowired
@Qualifier("MyService")
private LoginService ls;
public void setLs(LoginService ls) {
this.ls = ls;
}
這里的區別呢,是我的實現在spring中還要注冊MyService,雖然下面的寫法我貌似。。。沒學過?好吧應該就是注解實現。
這里放上我的Step,給自己看看,就當復習了。
[plain] view plain copy
2018年5月9日13:08:51
今天寫SSM整合
1.建立項目,添加spring5\springMVC5\Mybatis3的maven
2.寫spring、springmvc、mybatis的配置文件
2.1 spring配置文件,約束,哪里來?
源碼中可以找sxd約束文件,這個的話我在
E:\2017下學期\spring-framework-5.0.5.RELEASE-dist\spring-framework-5.0.5.RELEASE\docs\spring-framework-reference
找到了,一個bean,一個context
2.2 spring配置文件,導入beans和database
2.3 spring-bean 我先創建一個實體類Person,再注冊(注冊了沒用)
2.4 spring-db 我這里創建數據源,但是alt+/出不來提示,我一想,mysql的包沒載入,在maven中加入
還是沒得,恩,我加了jdbc的包,還是沒有,我以為是沒有源碼,下載了,還是沒有提示,棒
沒有提示,我追了下源碼,找set方法,我知道有4個,所以找得到,除此之外,還有一些其他屬性可以設置
編寫jdbc_mysql.properties文件,并導入
2.5 spring-bean 注冊dao,這個是spring集成mybatis,注冊sqlSession
這里就要導入mybatis和spring的整合包了,這里sqlsession中也要導入mybatis的配置文件
2.6 spring-bean 配置mapper自動掃描
MapperScannerConfigurer將掃描basePackage所指定的包下的所有接口類(包括子類),
如果它們在SQL映射文件中定義過,則將它們動態定義為一個Spring Bean,
這樣,我們在Service中就可以直接注入映射接口的bean
意思就是可以直接ref="dao類名",給你自動注冊好了
2.7 寫mybatis的配置文件,一個別名,一個映射
約束去×××?dtd文件
2.8 寫spring mvc配置文件,其實就是掃描controller
2.8 到這里,配置文件就寫完了,這里注意的是,java代碼沒開始寫,只是定義了幾個包,dao\service\beans
-------------配置部分完成---------------------
3.編寫service類和對應的dao
3.1 寫loginservice接口
3.2 寫實現類,其中有person的dao
3.3 寫persondao,也是個接口
3.4 在spring-bean中注冊接口
4.編寫dao對應的mapper
4.1 這里的namespace直接為對應dao類的限定名
4.2 mapper中的id和類中方法id一致
4.3 參數傳遞,用#{}
-------------mybatis部分完成---------------------
4.編寫controller
4.1 這里我寫了個basecontroller用于獲得applicationContext
4.2 就按照一般的,寫了login
5.寫jsp
5.1 寫index
5.2 寫welcome,成功
6.在web.xml中注冊spring\springmvc
6.1 開啟監聽事件
6.2 注冊spring
6.3 注冊springmvc
7.跑程序
失敗了1:datasource創建失敗,讀不到驅動,先把字符串填進去
失敗了2:mybatis的config和mapper頭中不能出現另一個 mapper 對應 mapper did config 對應 config did
失敗了3:找不到persondao,bean初始化失敗,dao的Setter忘了寫無法注入
第二個原因,如果類名只有第一個字母大寫,這個時候要寫小寫
ref="personDao" ref="IPersonDao"
失敗了4:不用base這樣的方法拿到容器。。。直接在參數中加上HttpServletRequest獲取
8.加入springmvc攔截器,只讓有權限的人進入網頁
8.1 在controller中添加方法
8.2 編寫攔截器類
8.3 在xml中注冊攔截器
*這里我發現他的spring,就是獲取容器那里好像是不太一樣的,是
@Autowired
@Qualifier("MyService")
private LoginService ls;
public void setLs(LoginService ls) {
this.ls = ls;
}
這一堆東西,我找了找講義,然后把代碼給補上了,除了控制器這里,還有就是業務實現類:
@Service("MyService")
public class LoginServiceImp implements LoginService {
@Autowired
private PersonDao pdao;
這樣,當然,還有xml配置文件里面,需要把之前手動定義的MyService變成掃描包
<context:component-scan base-package="com.ssmlogin.service" />
這樣,就可以直接用ls了。
mybatis建議用配置文件開發,而springmvc我默認是注釋,spring的注釋也可以看一看
9.添加spring事務,當然是為了圖ACDI特性
9.1 編寫spring-tx配置文件,2件事,<!-- 注冊事務管理器 -->, <!-- 注冊事務注解驅動 -->
9.2 在業務類名上加上標記
9.3 測試事務性,在注冊類中拋出異常
9.4 controller中寫入注冊方法
失敗了:我按照講義直接加注釋,好像不行,看以前筆記,有個
@Transactional(isolation=Isolation.DEFAULT, propagation=Propagation.REQUIRED, rollbackFor=Exception.class)
可能是缺省的沒有rollbackFor吧。。。
10.添加springmvc異常操作
10.1 在Springmvc中注冊異常捕獲
我發現我錯了,是直接在controller寫就好了,加上@ExceptionHandler(Exception.class)標記
OK
11.springAOP我還沒涉及到,所以有這里再寫個例子
這里寫AOP的對一個類的處理,大概就是獲取具體權限吧
比如我們權限有2個級別,登錄是一個級別,買買買是一個級別,
每次執行買買買之后,就退出
11.1 導入aspectj的包
11.2 編寫MyAspectJ.java,編寫前置通知、后置通知
11.3 在spring-aspectj.xml中注冊
失敗了:一直不行,配置得好好的,AspectJ可以對service進行攔截,但是對controller不行
這個時候我就在想,因為service畢竟是在容器里注冊了的,但是springmvc里面也有controller的注冊啊
查了半天,恩,aspectj的配置要寫在springmvc的配置文件里面就生效了。。。
絕望嘻嘻嘻
至此,SSM整合,完成。2018年5月10日17:35:08
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。