本文共 3680 字,大约阅读时间需要 12 分钟。
我最近才整合完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 就按照一般的,写了login5.写jsp
5.1 写index 5.2 写welcome,成功6.在web.xml中注册spring\springmvc
6.1 开启监听事件 6.2 注册spring 6.3 注册springmvc7.跑程序
失败了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)标记 OK11.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
转载于:https://blog.51cto.com/8641689/2115149