SSM

SSM就是指的:SpringMVC、SpringFramework、MyBatis
SpringMVC
原文地址:什么是Spring MVC
什么是MVC
MVC是模型(Model)、视图(View)、控制器(Controller)的简写,是一种软件设计规范
Model
Model(模型):数据模型,提供要展示的数据,因此包含数据(java bean)和行为(service层),可以认为是领域模型或JavaBean组件(包含数据和行为),不过现在一般都分离开来:Value Object(数据Dao) 和 服务层(行为Service)。也就是模型提供了模型数据查询和模型数据的状态更新等功能,包括数据和业务
View
View(视图):负责进行模型的展示,一般就是我们见到的用户界面,客户想看到的东西。
Controller
Controller(控制器):接收用户请求,委托给模型进行处理(状态改变),处理完毕后把返回的模型数据返回给视图,由视图负责展示。也就是说控制器做了个调度员的工作。
最典型的MVC就是JSP + servlet + javabean的模式。
Spring 常用注解总结
核心注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Component |
类 |
通用组件注解,标记Spring管理的组件 |
通用组件注册 |
@Component |
@Service |
类 |
业务层组件注解 |
业务逻辑层组件 |
@Service |
@Repository |
类 |
数据访问层组件注解 |
数据访问层组件 |
@Repository |
@Controller |
类 |
控制层组件注解 |
Web控制器组件 |
@Controller |
@RestController |
类 |
RESTful控制器注解(@Controller + @ResponseBody) |
REST API控制器 |
@RestController |
@Configuration |
类 |
配置类注解 |
Java配置类 |
@Configuration |
@ComponentScan |
类 |
组件扫描注解 |
指定组件扫描包路径 |
@ComponentScan("com.example") |
依赖注入注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Autowired |
字段/方法/构造器 |
自动装配依赖(默认按类型) |
自动注入依赖对象 |
@Autowired |
@Qualifier |
字段/方法/参数 |
指定具体Bean名称 |
解决同类型多个Bean冲突 |
@Qualifier("userDao") |
@Resource |
字段/方法 |
JSR-250注解(默认按名称) |
按名称注入Bean |
@Resource(name="userDao") |
@Inject |
字段/方法/构造器 |
JSR-330注解 |
标准化依赖注入 |
@Inject |
@Value |
字段/方法/参数 |
注入属性值 |
注入配置属性值 |
@Value("${app.name}") |
Bean管理注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Bean |
方法 |
在配置类中定义Bean |
手动创建和配置Bean |
@Bean("userService") |
@Scope |
类/方法 |
指定Bean作用域 |
控制Bean生命周期 |
@Scope("prototype") |
@Primary |
类/方法 |
指定首选Bean |
解决自动装配歧义 |
@Primary |
@Lazy |
类/方法 |
延迟初始化Bean |
优化启动性能 |
@Lazy |
@Profile |
类/方法 |
指定环境配置 |
多环境配置管理 |
@Profile("dev") |
Web相关注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@RequestMapping |
类/方法 |
通用请求映射 |
定义HTTP请求映射 |
@RequestMapping("/users") |
@GetMapping |
方法 |
GET请求映射 |
查询操作 |
@GetMapping("/{id}") |
@PostMapping |
方法 |
POST请求映射 |
新增操作 |
@PostMapping |
@PutMapping |
方法 |
PUT请求映射 |
更新操作 |
@PutMapping("/{id}") |
@DeleteMapping |
方法 |
DELETE请求映射 |
删除操作 |
@DeleteMapping("/{id}") |
@RequestParam |
参数 |
获取请求参数 |
获取URL参数 |
@RequestParam("id") Long id |
@PathVariable |
参数 |
获取路径参数 |
获取RESTful路径变量 |
@PathVariable("id") Long id |
@RequestBody |
参数 |
获取请求体数据 |
接收JSON数据 |
@RequestBody User user |
@ResponseBody |
方法/返回值 |
返回数据到响应体 |
返回JSON/XML数据 |
@ResponseBody |
@RequestHeader |
参数 |
获取请求头 |
获取HTTP头信息 |
@RequestHeader("User-Agent") String userAgent |
@CookieValue |
参数 |
获取Cookie值 |
获取Cookie信息 |
@CookieValue("JSESSIONID") String sessionId |
参数校验注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Valid |
参数 |
启用参数验证 |
验证请求参数 |
@Valid @RequestBody User user |
@Validated |
类/参数 |
启用分组验证 |
分组参数验证 |
@Validated |
@NotNull |
字段 |
不能为null |
必填字段验证 |
@NotNull |
@NotBlank |
字段 |
字符串不能为空 |
字符串必填验证 |
@NotBlank |
@Min/@Max |
字段 |
数值范围限制 |
数值范围验证 |
@Min(1) |
@Size |
字段 |
长度限制 |
字符串长度/集合大小验证 |
@Size(min=2, max=20) |
@Pattern |
字段 |
正则表达式匹配 |
格式验证 |
@Pattern(regexp="^1[3-9]\\d{9}$") |
AOP相关注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Aspect |
类 |
定义切面 |
面向切面编程 |
@Aspect |
@Pointcut |
方法 |
定义切点 |
定义横切关注点 |
@Pointcut("execution(* *.service(..))") |
@Before |
方法 |
前置通知 |
方法执行前处理 |
@Before("pointcut()") |
@After |
方法 |
后置通知 |
方法执行后处理 |
@After("pointcut()") |
@Around |
方法 |
环绕通知 |
方法执行前后环绕处理 |
@Around("pointcut()") |
@AfterReturning |
方法 |
返回通知 |
方法正常返回后处理 |
@AfterReturning("pointcut()") |
@AfterThrowing |
方法 |
异常通知 |
方法抛异常后处理 |
@AfterThrowing("pointcut()") |
事务管理注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Transactional |
类/方法 |
声明式事务 |
数据库事务管理 |
@Transactional |
@TransactionalEventListener |
方法 |
事务事件监听 |
事务相关事件处理 |
@TransactionalEventListener |
配置相关注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@PropertySource |
类 |
加载属性文件 |
加载外部配置文件 |
@PropertySource("classpath:app.properties") |
@Import |
类 |
导入其他配置类 |
组合多个配置类 |
@Import({Config1.class, Config2.class}) |
@Conditional |
类/方法 |
条件化配置 |
条件化Bean注册 |
@Conditional(WindowsCondition.class) |
@EnableAutoConfiguration |
类 |
启用自动配置 |
Spring Boot自动配置 |
@EnableAutoConfiguration |
测试相关注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@SpringBootTest |
类 |
Spring Boot测试 |
集成测试 |
@SpringBootTest |
@Test |
方法 |
测试方法 |
单元测试方法 |
@Test |
@BeforeEach |
方法 |
测试前执行 |
测试初始化 |
@BeforeEach |
@AfterEach |
方法 |
测试后执行 |
测试清理 |
@AfterEach |
@MockBean |
字段 |
模拟Bean |
模拟依赖对象 |
@MockBean |
@SpyBean |
字段 |
监视Bean |
部分模拟真实对象 |
@SpyBean |
其他常用注解
| 注解 |
作用域 |
说明 |
适用场景 |
示例 |
@Scheduled |
方法 |
定时任务 |
定时执行任务 |
@Scheduled(cron="0 0 12 * * ?") |
@Async |
方法 |
异步执行 |
异步处理任务 |
@Async |
@EventListener |
方法 |
事件监听 |
监听应用事件 |
@EventListener |
@Order |
类/方法 |
指定执行顺序 |
控制组件执行顺序 |
@Order(1) |
@DependsOn |
类/方法 |
指定依赖关系 |
控制Bean初始化顺序 |
@DependsOn("databaseInitializer") |