spring boot

整体结合JAVAguide和代码文件学习
https://javaguide.cn/system-design/framework/spring/spring-knowledge-and-questions-summary.html#aop-%E5%B8%B8%E8%A7%81%E7%9A%84%E9%80%9A%E7%9F%A5%E7%B1%BB%E5%9E%8B%E6%9C%89%E5%93%AA%E4%BA%9B
一、IOC
必会
D:\javaprojects\spring_learning\spring_ioc ()

二、AOP
必会
D:\javaprojects\spring_learning\spring\spring_20_aop_advice_type (advice的基本类型)
D:\javaprojects\spring_learning\spring\spring_22_aop_advice_data (教你如何获取接入点函数的参数,)
D:\javaprojects\spring_learning\spring\spring_21_case_interface_run_speed (结合mybatis的使用)

@After 和 @AfterReturning 的区别

Spring的事务管理
https://javaguide.cn/system-design/framework/spring/spring-transaction.html
Spring 并不直接管理事务,而是提供了多种事务管理器
2种方法:
TransactionTemplate或者TransactionManager,
TransactionManager:Spring 为各个平台如:JDBC(DataSourceTransactionManager)、Hibernate(HibernateTransactionManager)、JPA(JpaTransactionManager)等都提供了对应的事务管理器

Spring AOP的动态代理底层:
动态代理是在运行时动态生成代理类和代理对象的技术,而不是在编译时就确定代理类。Spring AOP 支持两种动态代理方式:JDK 动态代理和 CGLIB 动态代理。如果目标对象实现了某个接口,则使用JDK 动态代理,否则使用CGLIB 动态代理。

1个TransactionManager的简单例子

  1. 在创建datasource时就创建一个返回PlatformTransactionManager对象的方法,其实际返回一个DataSourceTransactionManager的对象(它是子类),并绑定上datasource。
  2. 在service类中对某个方法(例如转账)添加Transactional注解@Transactional (这样使得Spring为“转账”方法生成一个代理对象,也即在该方法执行前开启一个事务,在方法正常执行完毕后提交事务,如果方法执行过程中抛出异常,则回滚事务。)
    补充:事务传播:假设上面的“转账”方法调用了另一个注解了@Transactional的方法B,则Spring在为开启“转账”方法一个事务后,需要为方法B也开启一个事务吗?还是说这两个方法使用同一个事务,一起回滚?@Transactional(propagation = Propagation.REQUIRED)则是只开一个事务,当然也有其他属性值,不再细说
    D:\javaprojects\spring_learning\spring\spring_24_case_transfer\src\main\java\com\itheima\service\AccountService.java

三、 Spring MVC
一个简单的vue+spring mvc的网页示例:以tomacat启动springmvc_11_page [tomcat7:run],然后点开http://localhost/pages/books.html,代码在D:\javaprojects\spring_learning\springmvc\springmvc_11_page
(前后端传值!必看,https://javaguide.cn/system-design/framework/spring/spring-common-annotations.html,结合postman软件理解,postman软件可以自定义往一个网址发送带有自定义json数据的http请求)
简易流程:
1.在pom.xml中导入相关网络配置
2.初始化springmvc config和servlet容器(交给tomcat),注意要分开加载spring的config和springmvc config
3.controller用于处理网站的请求地址:例如http://localhost/save,准确来说是处理两类请求:POST请求和PUT请求,然后调用service对象的方法,例如查询用户信息,保存用户信息,获取用户信息列表,然后将这些方法的结果以json格式返回给前端。
上面第3点是使用@Controller和@ResponseBody完成的,也可以使用restful风格实现,即@RestController
具体见
D:\javaprojects\spring_learning\springmvc\springmvc_07_rest_case
4.service一般用于调用dao类型的对象的方法,例如查询用户信息,保存用户信息,获取用户信息列表,然后return将这些方法的结果。

**结合mybitas、springmvc、spring **
连接本地创建好的数据库
具体见
D:\javaprojects\spring_learning\springmvc\springmvc_10_exception
controller 返回一个自定义好的统一格式的数据(Result类)给前端,若业务层(Service类)处理时抛出了异常,需要controller中的异常捕捉器来捕捉,并返回Result类

(拦截器,注意,最好和servlet的过滤器进行对比学习)
1.过滤器是servlet中定义的,拦截器是spring的一个组件,由Spring容器管理
2. 实现原理不同
过滤器和拦截器 底层实现方式不相同,过滤器是基于函数回调的,拦截器则是基于Java的反射机制(动态代理)实现的。
3.处理过程:

过滤器主要是对在进入controller之前进行拦截,,具体流程是寻找一个适配的处理器handler,可以(处理前拦截、处理中拦截、处理后拦截,类似AOP思想)

posted @ 2025-03-04 18:47  torrentgz  阅读(14)  评论(0)    收藏  举报