SSM简要介绍
之前没有接触过Java,这次要做的导师的横向被甲方要求必须用java,必须用ssm框架,所以只能去学了一下,遇到了一些坑,在此说明一下,方便以后自己查询,如果能帮到其他人就更好了。
# 什么是spring?
对于Spring,一个很重要的作用是依赖注入。举一个例子。我们的项目可能有service层和controller层。
controller层的定义如下:
@RestController
@RequestMapping("/user")
public class UserController {
UserService userService;
@Autowired
UserController(UserService userService){
this.userService = userService;
}
@ResponseBody
@RequestMapping(value="/login",produces="application/json;charset=UTF-8",method = RequestMethod.POST)
public String login(HttpServletRequest request, UserDTO userDTO) {
return "success";
}
}
2
3
4
5
6
7
8
9
10
11
12
13
14
可以看到UserController用到了UserService,如果没有spring,那么你需要自己构造一个UserService,传入到UserController中去,有了spring,那么你只需要写完UserService这个类,然后使用@Service标注,同时在Controller里面使用@AutoWired,那么spring就会自动构造一个UserSerive,注入到UserController中去。
# spring的弊端与springboot
要使用spring,你需要配置非常多的xml文件。例如,applicationContext.xml,spring-mvc.xml等等。这些配置文件通常很难阅读,很难配置,但是很多项目的大部分内容又是相同的,或者能按照某种模板制作出来的。为了解决这个问题,springboot诞生了。springboot使用了“约定优于配置”的方式。通俗的讲,springboot同样支持spring的功能,同时它不需要你写很多xml配置文件,例如,要扫描哪些包。默认情况下,它会扫描和application.java同目录下的包和子包,而这也符合一般人的逻辑,因此无需进行配置。
举一个例子,我们去吃饭,spring需要你配置好,你是中国人还是外国人,你是否不吃肉,你是否用一双筷子,你是否使用勺子等等。spring就是认为你是中国人,你吃肉,你使用筷子。如果你是素食主义者,那么在单独说明就好了,而不是所有东西都必须配置。
# 遇到的一些坑
由于是第一次用java和ssm,遇到了一些坑,在此说明一下(可能很离谱)。
# 1.xml文件提前结束
在target/classes里面有一个空的xml文件,不管怎么重新生成都不行,然后一直报错什么“文件提前结束”。后来直接把这个xml删除了就好了,估计是之前不小心生成的时候被我强制关掉了,然后就留了一个空文件,后来改了文件名不会生成这个xml了。(PS:重新生成不应该把这个目录自动清空在重新生成么!!)
# 2. 一开始用的spring,改用springboot之后报错
Parameter 0 of constructor in com.main.carbon_emission_monitor.repo.impl.UserRepoImpl required a bean of type 'com.main.carbon_emission_monitor.dao.UserDAO' that could not be found.
检查了UserDAO明明存在,但就是报错,后来突然想到,UserDAO是个interface,之前有mybatis实现,结果改用springboot之后,没有加mybatis相关的东西,导致这个接口没有实现。