我最近才整合完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进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。