【SSM】Spring + SpringMVC + Mybatis
SSM课程,以下为该课程的笔记
bean:IOC容器创建的对象
P12 bean的生命周期
在bean中定义init()和destroy()方法,然后在xml中配置方法名,让bean对象能找到对应的生命周期方法。
或通过实现接口的方式定义声明周期方法。
P13 setter注入
注入引用类型 :定义set方法后在propoties标签的ref属性注入。
注入基本类型:声明变量后在propoties标签的value属性注入。
P14 构造器注入
在实现类写构造方法,用constructor-arg标签注入。
P15 依赖自动装配
在xml的bean标签用autowire="byXxx"配置。推荐用byType。
(仅用于引用类型依赖注入)
P16 集合注入
P17 案例:数据源对象管理
管理第三方bean:例如Druid
在bean标签中的property标签中设置value。
C3P0连接池对象
P18 加载properties文件
将配置信息从写在xml文件变成写在properties中,然后在xml中用插值语法配置。开启命名空间改5处。
P19 容器
BeanFactory是ioc容器的顶层接口。
ApplicationContext接口是Spring容器的核心接口,提供基础的bean操作相关方法,通过其它接口扩展其功能。
P20 小结
bean配置 di配置
P21 注解开发定义bean
在要定义的bean上面写@Component。
Spring提供Component注解的三个衍生注解:
@Controller:定义表现层bean
@Service:定义业务层bean
@Repository:定义数据层bean
配合context:component-scan使用。
P22 纯注解开发
@Configuration
@ComponentScan
AnnotationConfigApplicationContext
P23 注解开发-bean管理
bean作用范围:@Scope(“prototype”)非单例模式
“singleon” 单例模式
bean生命周期:init()前加@PostConstruct(构造后)
destroy()前加@PreDestroy(销毁前)
P24 注解开发-依赖注入
自动装配:@Autowired(按类型注入)
如果有两个相同类型的bean,加@Qualifier(“beanName”)指定加载bean的名称。
自从装配基于反射设计创建对象,无需setter方法。
建议使用无参构造方法。
上面输入的是引用类型,简单类型在Dao用@Value(“xxx”)或(“${name}”)注入。
使用@PropertySource加载properties文件。
P25 注解开发-管理第三方bean
用@Bean将return的对象定义为bean对象。写在JdbcConfig中,在核心配置文件中用@Import(JdbcConfig.class)导入配置。
P26 为第三方Bean注入资源
简单类型:把值从set中拎出去声明成员变量,加@Value(“name”)注解。
引用类型:直接使用方法形参注入。(原理:自动装配)
P27 注解开发总结
P28-29 Spring整合MyBatis
导入mybatis-spring坐标
SqlSessionFactoryBean
两部分配置转成set
P30 Spring整合JUnit
P31 AOP面向切面编程
期待被注入功能的方法—>连接点(所有的方法)
注入的方法—>通知(共性功能) 通知所在的类—>通知类
被注入功能的方法—>切入点(要追加功能的方法)
描述通知与切入点的关系—>切面
P32 AOP入门案例:在接口执行前输出当前系统时间
用Pointcut定义切入点,在私有无返回值无函数体的方法上。再在通知上用@Before绑定切面。
P33 AOP工作流程
P34 AOP切入点表达式
动作关键字((访问修饰符) 返回值类型 包名.类名/接口名.方法名(参数)异常名)
通配符 */…/+
P35 AOP通知类型
前置通知 @Before(“pt()”)
后置通知 @After(“pt()”)
环绕通知(前后都有) @Around(“pt()”)
public void around(ProceedingJoinPoint pjp) {
xxx前操作
pjp.proceed(); //调用原始操作
xxx后操作
}
通常使用Object作为返回类型。
返回后通知(正常结束无异常)@AfterReturning
抛出异常后通知 @AfterThrowing
P36 案例:业务层接口执行效率
P37 AOP通知获取数据
获取参数 pjp.getArgs();
获取返回值
获取异常
P38 案例:百度网盘密码数据兼容处理(去空格)
P39 AOP总结
使用场景 :有大量的共同功能需要注入
P40 Spring事务
@Transactional
@PlatformTransactionManager
P41 Spring事务角色
把in钱和out钱放在一个事务中,该事务叫—>事务管理员
发起事务方,在Spring中通常指代业务层开启事务的方法
in钱和out钱叫—>事务协调员
加入事务方,在Spring中通常指代数据层方法,也可以是业务层方法
P42 Spring事物属性
rollbackFor设置事务回滚异常 (rollbackFor = {NullPointException.class})
案例:转账业务追加日志
事务传播行为:事务协调员对事务管理员所携带事务的处理态度
@Transactional(propagation = Propagation.REQUIRES_NEW)
P43-74 SpringMVC
P43 SpringMVC简介
功能类似servlet,均为表现层。接受请求参数,返回响应结果。
P44 SpringMVC入门案例
@Controller
public class UserController {
@RequestMapping(“/save”)
@ResponseBody
public String save(){
xxxxxx;
return “xxx”;
}
}
设定SpringMVC加载对应的bean
@Configuration
@ComponentScan(“com.itheima.controller”)
public class SpringMvcConfig {
}
在ServletContainerInitConfig中定义servlet容器启动的配置类,在里面加载spring的配置。
P46 bean加载控制
控制Spring/SpringMVC容器加载各自的bean。
SpringMVC的相关bean:表现层bean
Spring控制的bean:业务bean(Service)、功能bean(DataSource等)
SpringBoot根据这个实现加载bean的细粒度控制。
方式一:将Spring加载的bean设定扫描范围为com.itheima,exclude掉controller包内的bean
方式二:将Spring加载的bean设定扫描范围为精准范围,include住service包、dao包等
P48 请求映射路径
设置模块名作请求前缀,添加类注解@RequestMapping设置模块名为请求路径前缀。
P49 get与post请求发送普通参数(Postman)
处理中文乱码:配置字符过滤器
P50 5种类型参数传递
普通参数:若参数名相同则直接传递,若不同用@RequestParam(“name”)绑定参数关系。
POJO参数:直接传递。
嵌套POJO参数:用. 连接属性名层级
数组&集合参数:key相同直接往里加
P51 json数据传递参数
@EnabaleWebMvc注解将json格式的参数转化为对象
@RequestBody与@RequestParam区别:
@RequestBody用于接受json数据
@RequestParam用于接受url地址、表单传参
P52 日期型参数传递
@DateTimeFormat(pattern=“yyyy/MM/dd HH:mm:ss”)
原理:convert接口-类型转换器
P53 响应
(可以返回jsp页面或text文本)
加@ResponseBody,将return的对象集合转成json格式。
类型转换器:HttpMessageConverter
P54 REST风格(访问网络资源的格式)
因为要简化路径,所以REST风格根据行为动作区分操作方式:GET查询/POST新增或保存/PUT修改/DELETE删除
模块用复数加s
P56 RESTful快速开发
@RestController = @Controller + @ResponseBody
@GetMapping(“/{id}”) @PostMapping @PutMapping @DeleteMapping
代替值+方法的写法