后端框架复习相关

1、Spring的基本概念及其优点

基本概念:Spring是分层的java SE/EE应用一站式的轻量级开源框架,以 IOC (控制反转) 和 AOP (切面编程) 为核心,提供了展现层Spring MVC ,持久层Spring JDBC 及业务事务管理等技术。
优点:

  • 简化开发,解耦,集成其它框架。
  • 低侵入式设计,代码污染级别级别。
  • Spring的DI机制降低了业务对象替换的复杂性,提高了软件之间的解耦。
  • Spring AOP支持将一些通用的任务进行集中式的管理,例如:安全,事务,日志等,从而使代码能更好的复用。
2、Spring Boot的特性

Spring CLI:允许使用 Groovy 编写 Spring 引导应用程序,并避免了样板代码。
启动依赖项:在此功能的帮助下,Spring Boot 将公共依赖项聚集在一起,最终提高了工作效率。
Spring Initializer:这基本上是一个 Web 应用程序,它可以自动创建一个内部项目结构,不必再手动设置。
自动配置:Spring Boot 的自动配置特性可以为正在处理的项目加载默认配置。这正方式可以避免不必要的 WAR 文件。
Spring 驱动器:这一功能为运行 Spring Boot 应用程序提供帮助。
日志和安全性:Spring Boot 的日志和安全性特性,确保所有使用 Spring Boot 的应用程序都得到了适当的保护,没有任何麻烦。

3、使用 profiles 配置特定环境的方式

profiles 是识别环境的关键
如应用程序属性文件中存在属性:example.message: Dynamic Message
想要用自定义应用程序属性
需要创建
application-dev,属性为 example.message: dev
application-prod,属性为 example.message: prod
如要应用其中一个自定义应用程序属性,
必须在环境中设置概要文件:
spring.profiles.active = prod

4、使用Maven创建Spring Boot应用程序的流程

使用Spring Initializr:
选择 Maven 项目和所需的依赖项。然后填写其他需要的细节,如组、工件,然后单击 Generate Project。
下载项目后,将项目解压缩到您的系统中。
接下来,使用 Spring 工具套件 IDE 上的 import 选项导入这个项目。
在导入项目时,必须选择项目类型为 Maven,源项目应该包含 pom.xml 文件。

5、Spring AOP 的关键概念和使用场景

关键概念:

  • 方面(Aspect):一个关注点的模块化,这个关注点实现可能另外横切多个对象。
  • 连接点(Joinpoint): 程序执行过程中明确的点,如方法的调用或特定的异常被抛出。
  • 通知(Advice): 在特定的连接点,AOP框架执行的动作。
  • 切入点(Pointcut): 指定一个通知将被引发的一系列连接点的集合。
  • 引入(Introduction): 添加方法或字段到被通知的类。
  • 目标对象(Target Object): 包含连接点的对象。也被称作被通知或被代理对象。POJO
  • AOP代理(AOP Proxy): AOP框架创建的对象,包含通知。
  • 织入(Weaving): 组装方面来创建一个被通知对象。
    使用场景:
  • Authentication 权限
  • Caching 缓存
  • Context passing 内容传递
  • Error handling 错误处理
  • Lazy loading 懒加载
  • Debugging  调试
  • logging, tracing, profiling and monitoring 记录跟踪 优化 校准
  • Performance optimization 性能优化
  • Persistence  持久化
  • Resource pooling 资源池
  • Synchronization 同步
  • Transactions 事务
6、Spring常用注解及说明

@Component:可以使用此注解描述Spring中的Bean,但它是一个泛化的概念,仅仅表示一个组件(Bean) ,并且可以作用在任何层次。
@Repository:用于将数据访问层(DAO层)的类标识为Spring中的Bean,其功能与@Component 相同。
@Service:通常作用在业务层(Service层),用于将业务层的类标识为Spring中的Bean,其功能与@Component 相同。
@Controller:通常作用在控制层(如Spring MVC的Controller),用于将控制层的类标识为Spring中的Bean,其功能与@Component 相同。
@Autowired:用于对Bean的属性变量、属性的setter方法及构造方法进行标注,配合对应的注解处理器完成Bean的自动配置工作。默认按照Bean的类型进行装配。

7、Spring MVC的工作流程

(1)用户发送请求至前端控制器DispatcherServlet;
(2) DispatcherServlet收到请求后,调用HandlerMapping处理器映射器,请求获取Handle;
(3)处理器映射器根据请求url找到具体的处理器,生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet;
(4)DispatcherServlet 调用 HandlerAdapter处理器适配器;
(5)HandlerAdapter 经过适配调用 具体处理器(Handler,也叫后端控制器);
(6)Handler执行完成返回ModelAndView;
(7)HandlerAdapter将Handler执行结果ModelAndView返回给DispatcherServlet;
(8)DispatcherServlet将ModelAndView传给ViewResolver视图解析器进行解析;
(9)ViewResolver解析后返回具体View;
(10)DispatcherServlet对View进行渲染视图(即将模型数据填充至视图中)
(11)DispatcherServlet响应用户。

8、Spring Boot如何解决跨域问题

通过实现WebMvcConfigurer接口,然后重写addCorsMappings方法解决跨域问题。

9、在Spring Boot中使用Spring Data JPA如何实现持久层服务

(1)引入spring-data-jpa的包依赖
(2)在application.properties中加上在控制台打印sql语句的配置,方便调试
(3)修改实体类,添加注解@Entity、@Table(name="items")、@Id()、@GeneratedValue(strategy = GenerationType.AUTO)
(4)编写dao接口,继承了Repository<T, Serializable>
(5)编写service层和controller层

10、MyBatis是如何解决JDBC编程的不足

1、SQL语句写在代码中造成代码不易维护,实际应用SQL变化的可能较大,SQL变动需要改变java代码。
解决:将SQL语句配置在XXXXmapper.xml文件中与java代码分离。
2、向SQL语句传参数麻烦,因为SQL语句的where条件不一定,可能多也可能少,占位符需要和参数一一对应。
解决: MyBatis自动将java对象映射至SQL语句。
3、对结果集解析麻烦,SQL变化导致解析代码变化,且解析前需要遍历
解决:MyBatis自动将SQL执行结果映射至java对象。

11、Spring框架如何实现事务管理

(1)配置transactionManager:
本地事务:基于JDBC事务管理器配置
全局事务:大部分应用服务器容器提供JTA支持,配置好JNDI数据源和JtaTransactionManager即可。
(2)编程式:应用需要调用Spring提供的PlatformTransactionManager、TransactionDefinition 和 TransactionStatus 三个核心接口。
(3)声明式:声明式通过配置或注解方式将事务管理与业务逻辑代码独立,开发人员只需在配置文件中做相应的事务规则声明或注解,便可以将事务规则通过AOP横切应用到业务逻辑中。

12、将Spring引导Web应用部署为JAR和WAR文件的步骤

(1)在 pom.xml 文件中添加以下插件:

<plugin>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-maven-plugin</artifactId>
</plugin>

(2)构建一个JAR文件,需要在pom.xml中设置

<packaging>jar</packaging>

如果想要构建一个WAR文件,那么需要在pom.xml文件中设置

<packaging>war</packaging>
13、Spring Security和Shiro各种的优缺点

Spring Security是一个重量级的安全管理框架,Shiro是一个轻量级的安全管理框架
Spring Security概念复制,配置繁琐,Shiro概念简单,配置简单
Spring Security功能强大,Shiro功能简单

14、Spring Boot自动配置的原理

Spring Boot项目启动类上有一个核心注解@SpringBootApplication,该注解是一个组合注解,包含@SpringBootConfiguration、@EnableAutoConfiguration、@ComponentScan三个核心注解。
其中:
@SpringBootConfiguration注解表示Spring Boot配置类;
@EnableAutoConfiguration注解表示开启自动配置功能,该注解是Spring Boot框架最重要的注解,也是实现自动化配置的注解。@EnableAutoConfiguration注解内部的方法会从Spring Boot提供的自动配置依赖的META-INF/spring.factories文件中获取所有候选自动配置类,然后根据项目pom.xml文件中加入的依赖文件筛选并启动符合当前项目运行环境对应的自动配置类;
@ComponentScan注解是一个组件包扫描器,其主要作用是扫描指定包及其子包下所有注解类文件作为Spring容器的组件使用。

15、Spring Boot的自动配置,禁用自动配置的方法

Auto-configuration 用于自动配置应用程序所需的配置。
要禁用自动配置属性,必须排除 @EnableAutoConfiguration 属性,在不希望应用该属性的场景中。
@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}
如果类不在类路径中,那么要排除自动配置,照以下方法:
@EnableAutoConfiguration(excludeName={Sample.class})
使用 Spring .autoconfigure.exclude 属性来排除自动配置类列表

16、Mybatis的mapper映射

一对多:

<mapper namespace="com.msdn.dao.TeacherMapper">  
  <select id="getTeacherById" resultMap="TeacherStudent">    
    select s.id sid,s.name sname,t.id tid,t.name tname  from mybatis.student s,mybatis.teacher t    
    where s.tid = t.id and t.id =#{id}   
 </select>  
  <resultMap id="TeacherStudent" type="Teacher">    
    <id property="id" column="tid" />    
    <result property="name" column="tname" />    
    <collection property="students" ofType="Student" >       
         <result property="id" column="sid" />       
         <result property="name" column="sname" />      
          <result property="tid" column="tid" />    
    </collection> 
   </resultMap>
</mapper>

一对一:

<mapper namespace="gler.mybatis.onetoone.mapper.ClassesMapper">
    <select id="selectClassById" parameterType="int" resultMap="classmap">
        select * from tb_class c, tb_head_teacher t  where c.c_ht_id = t.ht_id and c.c_id=#{id}
    </select>
    <!-- resultMap:映射实体类和字段之间的一一对应的关系 -->
    <resultMap id="classmap" type="Classes">
        <id property="id" column="c_id" />
        <result property="name" column="c_name" />
        <!-- 一对一关联映射:association -->
        <association property="teacher" javaType="HeadTeacher">
            <id property="id" column="ht_id" />
            <result property="name" column="ht_name" />
            <result property="age" column="ht_age" />
        </association>
    </resultMap>
</mapper>
16、SpringBoot常用注解
//实体类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
public interface HomeRepository extends JpaRepository<Home,Integer> {
    @Query(value="select * from home where home_id = ?1", nativeQuery = true)
    Home getByHomeId(Integer homeId);
}

public interface HomeService {
    ResponseResult getById(int homeId);
}

@Service
public class HomeServiceImpl implements HomeService {
    @Resource
    private HomeRepository homeRepository;
    @Override
    public ResponseResult getById(int homeId) {
        Home home = homeRepository.getByHomeId(homeId);
        if (home == null){
            ResponseResult.failure(ResultCode.DATA_NULL);
        }
        return ResponseResult.success(home);
    }
}

@RestController
@RequestMapping(value = "/api/home/")
public class HomeController {
    @Resource
    private HomeService homeService;
    @PostMapping(value = "homeId")
    public ResponseResult getByHomeId(@PathVariable int homeId){
        return homeService.getById(homeId);
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,529评论 5 475
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,015评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,409评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,385评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,387评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,466评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,880评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,528评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,727评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,528评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,602评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,302评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,873评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,890评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,132评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,777评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,310评论 2 342