Spring

Spring Boot、Spring MVC 和 Spring 有什么区别

spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提
供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给
方法执行,比如日志、异常等

springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,
然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术
生成视图展现给前端

springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc
应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用

1 Sping

1.1 xml 实例化bean

  1. 使用无参构造方法实例化
    它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败
    <bean id="userDao" class="com.cn.dao.impl.UserDaoImpl"/>
    
  2. 工厂静态方法实例化
    工厂的静态方法返回Bean实例
    <bean id="userDao" class="com.cn.factory.StaticFactoryBean" 
    factory-method="createUserDao" />
    
  3. 工厂实例方法实例化
    工厂的非静态方法返回Bean实例
    public class DynamicFactoryBean {
    public UserDao createUserDao(){
    return new UserDaoImpl();
    	}
    }
    
    <bean id="factoryBean" class="com.cn.factory.DynamicFactoryBean"/>
    <bean id="userDao" factory-bean="factoryBean" factory-method="createUserDao"/>
    

1.2 BeanFactory和Application

1.3 Spring Bean的生命周期

  1. 通过包扫描路径,解析类得到BeanDefintion(定义)
  2. 确定构造方法,实例化得到对象
  3. 依赖注入,属性填充
  4. 回调Aware接口,比如BeanNameAware,BeanFactoryAware
  5. 调用初始化方法
  6. 调用BeanPostProcessor的初始化后的方法,这里会进行AOP(哪些类需要动态代理的创建)
  7. 当前bean是单例就会放到单例池
  8. 使用bean
  9. 容器关闭时调用 destory( ) 方法销毁bean

1.4 Bean 的作用域

  1. singleton :默认,(相对于容器来说)每个容器只有一个bean的实例
  2. prototype:每一个getBean都会创建一个新的对象,每次注入都会创建一个新的对象
  3. session:每个session中有一个bean实例
  4. application:bean被定义为在ServletContext的生命周期中复用一个单例对象
  5. global-session:全局作用域

1.5 bean自动装配

  1. xml 配置文件中定义autowrite属性
  2. @Autowired自动装配bean,可以在字段、setter方法、构造函数上使用。

1.6 Spring框架中的单例bean是线程安全的吗?

不是线程安全,框架没有对bean封装处理
把作用域改为多例 protopyte
不要在bean中生明有任何状态的实例变量

1.7 Spring框架中用到的设计模式

  1. 简单工厂:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
    Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是
    在传入参数后创建还是传入参数前创建这个要根据具体情况来定。
  2. 工厂方法:
  3. 单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点
  4. 动态代理:
    切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象创建动态的创建一个代理
    对象。SpringAOP就是以这种方式织入切面的。
    织入:把切面应用到目标对象并创建新的代理对象的过程。

1.8 Spring事务的实现方式,隔离级别

@Transactional 注解声明
隔离级别
read uncommitted(未提交读)
read committed(提交读、不可重复读)
repeatable read(可重复读)
serializable(可串行化)

数据库的配置隔离级别是Read Commited,而Spring配置的隔离级别是Repeatable Read,请问这时隔离
级别是以哪一个为准?
以Spring配置的为准,如果spring设置的隔离级别数据库不支持,效果取决于数据库

2 SpringMVC

SpringMVC 工作流程

  1. 用户发送请求到前端控制器
  2. 根据请求调用处理映射器查找对应处理方法
  3. contriller执行业务代码后返回ModeleAndView到前端控制器
  4. 前端控制器通过视图解析器进行视图渲染
  5. 然后响应到用户

在这里插入图片描述

SpringMvc里面拦截器是怎么写的

一种是实现HandlerInterceptor接口,
另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可

如何自定义注解?

  1. 创建一个自定义注解:与创建接口类似,但自定义注解需要使用 @interface

  2. 添加元注解信息,比如 @Target、@Retention、@Document、@Inherited 等

  3. 创建注解方法,但注解方法不能带有参数

  4. 注解方法返回值为基本类型、String、Enums、Annotation 或其数组

  5. 注解可以有默认值;

@Target(FIELD)
@Retention(RUNTIME)
@Documented
public @interface CarName {
    String value() default "";
}

SpringMvc怎么和AJAX相互调用的?

通过Jackson框架就可以把Java里面的对象直接转化成Js可以识别的Json对象。具体步骤如下 :
(1)加入Jackson.jar

(2)在配置文件中配置json的映射

(3)在接受Ajax方法里面可以直接返回Object、List等,但方法前面要加上@ResponseBody注解。

3 Mybatis

底层运行原理

1、MyBatis应用程序根据XML配置文件创建SqlSessionFactory;
2、SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession;
3、SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等;
4、用完之后关闭SqlSession

缓存

sqlSession

#{ } 和 ${ }的区别?

  1. #{}是预编译处理、是占位符, ${}是字符串替换、是拼接符。
    Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的set方法来赋值;
    Mybatis 在处理${}时, 就是把${}替换成变量的值,调用 Statement 来赋值;
  2. 使用#{}可以有效的防止 SQL 注入, 提高系统安全性。

mapper 传递多参

@param

动态sql

resultType,resultMap

Mybatis-Plus

mybatis 基础上的增强,简化开发
使用:

  1. 导入依赖,如果有注释掉之前mybatis的依赖
  2. 如果MyBatis plus有自定义mapper文件,地址配置的由mybatis-mapper-locations改为mybatis-plus.mapper-locations
  3. 给实体类加注解
    @TableName(“user”) 加载类上 将该类和数据库中对应的表建立联系 注解值为表名
    @TableId(value = “对应表列名”,type = IdType.AUTO) 建立主键属性和主键字段之间的联系。 value 字段名, type 定义主键自增类型 IdType.AUTO MySQL自动递增
    常规属性@TableField(“name”) 将常规属性和常规字段名建立联系
    连表查询 封装数据的属性 没有对应的字段 需要定义忽略
    @TableField(exist = false) exist = false代表当前属性在表中没有字段名

mybatis-plus 分页实现

在后端代码中的controller层中,实现一个IPage对象的实例引用,然后设置总记录数及每页显示条数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值