1、Mybatis #{}和${}的区别是什么
a、#{}是预编辑处理、是占位符,${}是字符串拼接符。
b、#{}替换为?号,用PreparedStatement来赋值,${}直接替换变量的值,用Statement赋值。
c、#{}在DBMS中、自动加入单引号,${}是DBMS外,不会加入单引号。
总结:#{}是线程防止SQL注入,提高系统安全性。
2、ApplicationContext和BeanFactory有什么?
a、扩展功能:
支持国际化、统一的资源文件访问方式、注册多个上下文、在监听器中注册bean事件、同时加载多个配置文件。
b、加载方式:
BeanFactory采用延迟加载、获取bean才初始化,ApplicationContext在启动容器时就加载所有Bean,及时发现存在的错误配置。
c、创建方式:
BeanFactory只能以编程的方式创建,ApplicationContext还支持以ContextLoader声明式创建。
d、注册方式:
BeanFactory是手动注册,ApplicatonContext是自动注册,都支持BeanPostProcessor、BeanFactoryPostProcessor的使用。
3、SpringBoot、SpringMVC、Spring有什么区别
a、Spring 是IOC容器,依赖注入实现控制反转,AOP弥补OOP代码重复问题。
b、SpringMVC是Spring web框架一种解决方案,前端控制器接收请求,提供url路由策略及适配执行Handle,将Handle的视图解析技术生成视图展现给前端。
c、SpringBoot是Spring提供一个快速开发工具包,快速开发Web应用。约定大于配置、整理了一系列的解决方案、开箱即用、降低耦合度。
4、SpringBoot 是如何启动Tomcat的
a、启动Spring容器。
b、通过@ConditionalOnClass 查找ClassPath 是有Tomcat依赖,就创建Tomcat Bean。
c、启动完成后,创建Tomcat对象,绑定端口,启动Tomcat。
5、SpringBoot常用注解及其底层实现
a、@SpringBootApplication:
@SpringBootConfiguration:等同于@Configuration,表示启动类也是一个配置类。
@EnableAutoConfiguration: 向Spring容器中导入一个Selector ,在ClassPath下 SpringFactories中所定义的自动配置类,将这些自动加载为配置Bean
@ComponentScan: 标识扫描路径,默认扫描当前目录下的其它类。
b、@bean:方法名成BeanName。
c、@Controller、@Service、@ResponseBody、@RequestBody、@Autowired。
6、SpringBoot中配置文件的加载顺序是怎样的?
a、命令行参数。
b、java系统属性。
c、操作系统环境变量。
d、jar 外部applicton-{profile}.properties或application-{profile}.yml (带spring.profile)的配置文件。
e、jar 内部applicton-{profile}.properties或application-{profile}.yml (带spring.profile)的配置文件。
f、jar 外部applicton.properties或application.yml (不带spring.profile)的配置文件。
g、jar 内部applicton.properties或application.yml (不带spring.profile)的配置文件。
i、@Configuration 注解上的@PropertySource。
7、SpringBoot自动配置原理(@Import+@Configuration+@Spring spi)
a、@SpringBootConfiguration => @Configuration
b、@EnableAutoConfiguration:
i、@Import(EnableAutoConfigurationImportSelector.class)=> selectImports(字符串数组,类的全路径)通过SpringFactoriesLoader.loadFactoryNames加载META-INF/spring.factories中的EnableAutoConfiguration=>@Configuration+@Bean。
ii、@AutoConfigurationPackage=>@Import(AutoConfigurationPackages.Registrar.class)=>ImportBeanDefinitionRegistrar注册扫描到全局变量、提供查询。
c、@ComponentScan。
8、SpringMVC的底层工作流程
a、用户发送请求给前端控制器DispatherServlet。
b、DispatherServlet收到请求调用HandlerMapping处理器映射器。
c、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
d、DispatcherServlet调用处理器适配器HandlerAdapter。
e、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
f、Controller执行完成返回ModelAndView。
g、HandlerAdapter将返回ModelAndView一并返回给DispatcherServlet。
h、DispatcherServlet将ModelandView传给视图解析器ViewSolver。
i、ViewSolver解析完后view返回给DispatcherServlet。
j、DispatcherServlet渲染视图。
k、DispatcherSevlet响应用户。
9、SpringMVC的九大组件
a、HandlerMapping。
b、HandlerAdapter。
c、HandlerExceptionResolver:统一的异常控制。
d、ViewResolver。
e、RequestToViewNameTranslator。
f、LocalResolver。
g、ThemeResolver:解析主题。
h、MultipartResolver:MultipartHttpServletRequest。
i、FlashMapManager:initFlashMapManager(context),用来管理FlashMap的,FlashMap主要用在redirect中传递参数。