spring是一个IOC容器,用来管理Bean,使用依赖注入实现控制反转,可以很方便的整合各种框架,提
供AOP机制弥补OOP的代码重复问题、更方便将不同类不同方法中的共同处理抽取成切面、自动注入给
方法执行,比如日志、异常等
springmvc是spring对web框架的一个解决方案,提供了一个总的前端控制器Servlet,用来接收请求,
然后定义了一套路由策略(url到handle的映射)及适配执行handle,将handle结果使用视图解析技术
生成视图展现给前端
springboot是spring提供的一个快速开发工具包,让程序员能更方便、更快速的开发spring+springmvc
应用,简化了配置(约定了默认配置),整合了一系列的解决方案(starter机制)、redis、mongodb、es,可以开箱即用
- 使用无参构造方法实例化
它会根据默认无参构造方法来创建类对象,如果bean中没有默认无参构造函数,将会创建失败
工厂静态方法实例化
工厂的静态方法返回Bean实例
工厂实例方法实例化
工厂的非静态方法返回Bean实例
public class DynamicFactoryBean {
public UserDao createUserDao(){
return new UserDaoImpl();
}
}
- 通过包扫描路径,解析类得到BeanDefintion(定义)确定构造方法,实例化得到对象依赖注入,属性填充回调Aware接口,比如BeanNameAware,BeanFactoryAware调用初始化方法调用BeanPostProcessor的初始化后的方法,这里会进行AOP(哪些类需要动态代理的创建)当前bean是单例就会放到单例池使用bean容器关闭时调用 destory( ) 方法销毁bean
- singleton :默认,(相对于容器来说)每个容器只有一个bean的实例prototype:每一个getBean都会创建一个新的对象,每次注入都会创建一个新的对象session:每个session中有一个bean实例application:bean被定义为在ServletContext的生命周期中复用一个单例对象global-session:全局作用域
- xml 配置文件中定义autowrite属性@Autowired自动装配bean,可以在字段、setter方法、构造函数上使用。
不是线程安全,框架没有对bean封装处理
把作用域改为多例 protopyte
不要在bean中生明有任何状态的实例变量
- 简单工厂:由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类。
Spring中的BeanFactory就是简单工厂模式的体现,根据传入一个唯一的标识来获得Bean对象,但是否是
在传入参数后创建还是传入参数前创建这个要根据具体情况来定。工厂方法:单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点动态代理:
切面在应用运行的时刻被织入。一般情况下,在织入切面时,AOP容器会为目标对象创建动态的创建一个代理
对象。SpringAOP就是以这种方式织入切面的。
织入:把切面应用到目标对象并创建新的代理对象的过程。
@Transactional 注解声明
隔离级别
read uncommitted(未提交读)
read committed(提交读、不可重复读)
repeatable read(可重复读)
serializable(可串行化)
数据库的配置隔离级别是Read Commited,而Spring配置的隔离级别是Repeatable Read,请问这时隔离
级别是以哪一个为准?
以Spring配置的为准,如果spring设置的隔离级别数据库不支持,效果取决于数据库
- 用户发送请求到前端控制器根据请求调用处理映射器查找对应处理方法contriller执行业务代码后返回ModeleAndView到前端控制器前端控制器通过视图解析器进行视图渲染然后响应到用户
一种是实现HandlerInterceptor接口,
另外一种是继承适配器类,接着在接口方法当中,实现处理逻辑;然后在SpringMvc的配置文件中配置拦截器即可
创建一个自定义注解:与创建接口类似,但自定义注解需要使用 @interface
添加元注解信息,比如 @Target、@Retention、@document、@Inherited 等
创建注解方法,但注解方法不能带有参数
注解方法返回值为基本类型、String、Enums、Annotation 或其数组
注解可以有默认值;
@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
#{ } 和 ${ }的区别?- #{}是预编译处理、是占位符, ${}是字符串替换、是拼接符。
Mybatis 在处理#{}时,会将 sql 中的#{}替换为?号,调用 PreparedStatement 的set方法来赋值;
Mybatis 在处理${}时, 就是把${}替换成变量的值,调用 Statement 来赋值;使用#{}可以有效的防止 SQL 注入, 提高系统安全性。
@param
动态sql resultType,resultMap Mybatis-Plusmybatis 基础上的增强,简化开发
使用:
- 导入依赖,如果有注释掉之前mybatis的依赖如果MyBatis plus有自定义mapper文件,地址配置的由mybatis-mapper-locations改为mybatis-plus.mapper-locations给实体类加注解
@TableName(“user”) 加载类上 将该类和数据库中对应的表建立联系 注解值为表名
@TableId(value = “对应表列名”,type = IdType.AUTO) 建立主键属性和主键字段之间的联系。 value 字段名, type 定义主键自增类型 IdType.AUTO MySQL自动递增
常规属性@TableField(“name”) 将常规属性和常规字段名建立联系
连表查询 封装数据的属性 没有对应的字段 需要定义忽略
@TableField(exist = false) exist = false代表当前属性在表中没有字段名
在后端代码中的controller层中,实现一个IPage对象的实例引用,然后设置总记录数及每页显示条数



