1、spring,springmvc,springboot的区别:
- spring是一个一站式的,轻量级的,非侵入式的Java开发框架,核心是IOC(控制反转)和AOP(面向切面),针对web层(springmvc),业务层(IOC),持久层(JdbcTemplate)都提供了多种配置方案,springmvc,springboot都算是spring的衍生品
- springmvc不是一个独立的框架,而是建立在spring的基础上框架,主要处理web层的路径映射和视图渲染,springmvc要配置xml文件,前端映射器,过滤器,简称配置地狱
- springboot是一个脚手架,只专注于后台接口,不需要开发视图渲染,配置文件,简化了配置流程
springboot还内嵌了tomcat服务器,直接运行main方法启动项目
2、spring的优势
- spring可以简化Java企业级应用开发,降低耦合性
- 支持声明式事务
- 通过配置就可以完成对事务的操作,无需手动编程
- 可以集成其他的框架,比如springmvc,mybatis等
- spring中的两个核心是IOC和AOP(spring的缺点是入门需要的时间长
3、spring的开发步骤:
- 创建maven项目
- 导入pom依赖
- 创建核心配置文件applicationContext.xml
- 写各个层
- 通过bean注册到容器中,或者注解
- 使用工厂classpathxmlApplicationContext创建bean对象
4、springmvc的工作流程?
- 用户发送请求给DispatcherServlet
- DispatcherServlet调用处理器映射器,映射器根据请求找到处理器,生成处理器对象并返回给DispatcherServlet
- DispatcherServlet调用处理器适配器,适配器去请求执行处理器,处理器执行完毕后返回modelAnadView给DispatcherServlet
- DispatcherServlet将ModelAndView传给视图解析器进行解析,解析器返回视图对象给DispatcherServlet
- DispatcherServlet根据视图对象进行渲染页面
5、@tableField不是数据库列名,和实体Vo是一个意思
6、@AutoWired和@Resource
- 注解@AutoWired根据类型依赖注入时,要求依赖的对象必须存在,当允许为null时,可以设置@AutoWired(required=false)
- 当一个userDao有多个实现类时,使用@AutoWired进行依赖注入时会报错,spring无法判断注入哪个,所以就需要和@Quaily搭配使用
3.注解@Resource根据名字依赖注入,可以作用在字段和set方法上
7、@mapper和@reposity
- 都是作用在dao层,mapper属于mybtais的注解,reposity是spring的注解
- mapper不需要配置扫描地址,通过mapper.xml文件中的命名空间找到对应的mapper类
- reposity需要配置扫描地址,就可以找到mapper类,注入到service中
8、 spring中的事务隔离级别和数据库中的一样,当数据库和spring中的隔离界别不同时,以spring为主
9、@postContructer注解
- 使用该注解修饰的方法会在init初始化之前执行,并且只被执行一次
- 执行步骤:构造方法,依赖注入AutoWired,postConstructer
10、使用过spring中的事务么?实现方式的原理是什么?
10.1、 xml方式,实现原理通过AOP做切面增强
- 使用过声明式事务
- 先注册一个事务管理器dataSourceTransactionManager
- 在xml文件中,实现基于aspectJ的声明式事务
- 定义事务,相当于一个增强,里面对属性做配置:method对哪些方法做增强,isolate事务的隔离级别,rollback-for发生哪些异常时回滚,propagation事务的传播特性等等
4.aop做织入,定义切入点,对目标对象的哪些方法实现增强,一般都是service层的方法,因为mapper层交给mybatis管理,controller交给springmvc主要做路径映射和视图解析,所以主要的业务逻辑就在service层上
<!-- 配置声明式事务 -->
<!-- 事务管理器-->
<bean id="dataSourceTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="dataSource"/>
</bean>
<!-- 基于aspctJ的声明式事务xml配置方式-->
<!-- 事务的定义,相当于一个增强-->
<tx:advice id="txAdvice" transaction-manager="dataSourceTransactionManager">
<!-- 增强事务的属性配置-->
<!-- isolate是事务的隔离级别
propagation事务的传播特性
rollback-for发生哪些异常事务回滚
-->
<tx:attributes