如果当时这 15 道题能答好,现在应该已经被录取了(记一次面试的亲身经历 2020-7-20
Spring Boot 是 Spring 框架的扩展,它消除了设置 Spring 应用程序所需的 XML 配置,更快、更高效。
以下是 Spring Boot 中的一些特点:
嵌入 tomcat,而且不需要部署 tomcat;
提供的 starter 来简化 maven 配置;
创建 Spring Boot 项目时可以选择 Spring 应用;
提供外部化配置;
不需要配置 xml 了;
3、MVC 配置
Spring 需要定义调度程序 servlet,映射和其它支持配置。我们可以使用 web.xml 文件或 Initializer 类来完成此操作。
public class MyWebAppInitializer implements WebApplicationInitializer {
@Override
public void onStartup(ServletContext container) {
AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext();
context.setConfigLocation("com.pingfangushi");
container.addListener(new ContextLoaderListener(context));
ServletRegistration.Dynamic dispatcher = container
.addServlet("dispatcher", new DispatcherServlet(context));
dispatcher.setLoadOnStartup(1);
dispatcher.addMapping("/");
}
}
还需要将 @EnableWebMvc 注释添加到 @Configuration 类,并定义一个视图解析器来解析从控制器返回的视图:
@EnableWebMvc
@Configuration
public class ClientWebConfig implements WebMvcConfigurer {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver bean
= new InternalResourceViewResolver();
bean.setViewClass(JstlView.class);
bean.setPrefix("/WEB-INF/view/");
bean.setSuffix(".jsp");
return bean;
}
}
和上述操作相比,Spring Boot 只需在 application 配置文件中配置间隔属性就能完成上述操作:
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
4、配置模板引擎 Thymeleaf
在 Spring 中,我们需要为视图解析器添加 thymeleaf-spring5 依赖项和一些配置:
@Configuration
@EnableWebMvc
public class MvcWebConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/views/");
templateResolver.setSuffix(".html");
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Override
public void configureViewResolvers(ViewResolverRegistry registry) {
ThymeleafViewResolver resolver = new ThymeleafViewResolver();
resolver.setTemplateEngine(templateEngine());
registry.viewResolver(resolver);
}
}
Spring Boot 直接添加 spring-boot-starter-thymeleaf 依赖就行了。
5、Spring Security 配置
Spring 需要依赖 spring-security-web 和 spring-security-config 模块。
接下来, 我们需要添加一个扩展 WebSecurityConfigurerAdapter 的类,并使用 @EnableWebSecurity 注解:
@Configuration
@EnableWebSecurity
public class CustomWebSecurityConfigurerAdapter extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin")
.password(passwordEncoder()
.encode("password"))
.authorities("ROLE_ADMIN");
}
@Override
prote
cted void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
.anyRequest().authenticated()
.and()
.httpBasic();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Spring Boot 添加 spring-boot-starter-security 依赖就行了。
6、Spring 支持传统的 web.xml,SpringBoot 使用嵌入式容器来运行程序,Spring Boot 使用 main 方法来启动嵌入式 web 服务器,它还负责将 servlet、filter、ServletContextInitializer bean 从应用程序上下文绑定到嵌入式 servelet 容器。
7、打包和部署
Spring 和 Spring Boot 都支持 maven 和 Gradle 通用打包管理技术。
Spring Boot 相对 Spring 的一些优点:
提供嵌入式容器支持;
使用命令 java -jar 独立运行 jar;
部署时可以灵活指定配置文件;
七、Spring Boot 和 Spring MVC 有什么区别?
Spring 框架有很多衍生产品,例如 Spring Boot、Spring MVC、Spring Security 等等,但是他们的基础都是 Spring 的 IOC 和 AOP。
IOC 提供了依赖注入的容器,AOP 提供了面向切面编程,然后在这两者的基础上实现了其它延伸产品的高级功能。
Spring MVC 是一种松耦合的方式开发 web 应用的框架。
通过 Dispatcher Servlet, ModelAndView?和?View Resolver,开发 web 应用变得很容易。解决的问题领域是网站应用程序或者服务开发--url 路由、session、模板引擎、静态 web 资源等等。
Spring Boot 实现了自动配置,降低了项目搭建的复杂度。
Spring Boot 主要为了解决 Spring 框架需要大量配置太麻烦的问题。同时集成了很多第三方库(例如 JDBC、Redis 等),Spring Boot 中的第三方库基本都是零配置的开箱即用。
对于我们来说,换成 Spring Boot 之后,项目初始化方法变了,配置文件变了,不需要安装 tomcat 了,maven 打包 jar 就能直接部署运行了,但你最核心的业务逻辑实现与业务流程实现没有任何变化。
八、RPC 是什么
[RPC 服务和 HTTP 服务对比](
)
九、websocket 应用的是哪个协议
WebSocket 是一个允许 Web 应用程序(通常指浏览器)与服务器进行双向通信的协议。HTML5 的 WebSocket API 主要是为浏览器端提供了一个基于 TCP 协议实现全双工通信的方法。
WebSocket 优势: 浏览器和服务器只需要要做一个握手的动作,在建立连接之后,双方可以在任意时刻,相互推送信息。同时,服务器与客户端之间交换的头信息很小。
十、项目中到的消息中间件
[【Spring Boot 7】RabbitMQ 详解](
)
有些东西不是你写了,你就会了,以后写博客,切记滥竽充数!
十一、spring boot 工程的部署
1、在 pom 文件中定义启动类的名称;
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<mainClass>org.spring.springboot.Application</mainClass>
</configuration>
</plugin>
</plugins>
</build>
2、定义 Spring Boot 启动类;
@SpringBootApplication
@MapperScan("org.spring.springboot.dao")
public class Application extends SpringBootServletInitializer{
public static void main(String[] args) {
// 程序启动入口
// 启动嵌入式的 Tomcat 并初始化 Spring 环境及其各 Spring 组件
SpringApplication.run(Application.class,args);
}
@Override//为了打包 springboot 项目
protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
return builder.sources(this.getClass());
}
}
主要就是继承 SpringBootServletInitializer 和重写 configure 方法;
3、然后到项目的 pom 平级的目录下面,使用 mvn clean package 命令打包成 jar;
4、然后再到 target 的目录下面执行 java -jar xxx.jar;
十二、Spring Boot 如何访问不同的数据库
1、单数据源的场景(一般的 Web 项目工程这样配置进行处理,就已经比较能够满足我们的业务需求)
多数据源多 SessionFactory 这样的场景,估计作为刚刚开始想象想处理在使用框架的情况下处理业务,配置多个 SessionFactory,然后在 Dao 层中对于特定的请求,通过特定的 SessionFactory 即可处理实现这样的业务需求,不过这样的处理带来了很多的不便之处,所有很多情况下我们宁愿直接使用封装的 JDBC 编程,或者使用 Mybatis 处理这样的业务场景
2、使用 AbstractRoutingDataSource 的实现类,进行灵活的切换,可以通过 AOP 或者手动编程设置当前的 DataSource,不用修改我们编写的对于继承 HibernateSupportDao 的实现类的修改,这样的编写方式比较好,至于其中的实现原理,让我细细到来。我们想看看如何去应用,实现原理慢慢的说!
3、编写 AbstractRoutingDataSource 的实现类,HandlerDataSource 就是提供给我们动态选择数据源的数据的信息,我们这里编写一个根据当前线程来选择数据源,然后通过 AOP 拦截特定的注解,设置当前的数据源信息,也可以手动的设置当前的数据源,在编程的类中。
十三、程序设计?
这是一个值得思考一生的话题!
评论