SSM整合,个人总结和step

我最近才整合完SSM。

前段时间,分开学习了这三个框架,都是看某黄埔军校的视频,整合的部分没看视频,想自己做。

但是有一些部分自己没有能完成,主要是如何从spring容器里取出ApplicationContext,这个我的实现比较low,看了看讲义,才OK的。

我的实现:

WebApplicationContext acc = WebApplicationContextUtils.getRequiredWebApplicationContext(request.getServletContext());
ls = (LoginService) acc.getBean("MyService");

而讲义上的实现:

@Autowired
@Qualifier("MyService")
private LoginService ls;
	
public void setLs(LoginService ls) {
	this.ls = ls;
}

这里的区别呢,是我的实现在spring中还要注册MyService,虽然下面的写法我貌似。。。没学过?好吧应该就是注解实现。

这里放上我的Step,给自己看看,就当复习了。

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
	
	
如果我的内容在哪里有问题,欢迎私信指正。

猜你喜欢

转载自blog.csdn.net/wzlhlhhh/article/details/80277914
今日推荐