Java后端开发框架知识点

1 篇文章 0 订阅
1 篇文章 0 订阅

一.spring

1.spring AOP与IOC

AOP:面向切面编程。

IOC:控制反转:我们不必关心对象组件的创建细节,仅仅需要告诉IOC我需要哪些组件,IOC容器就会帮我们把组件组装出来。
控制正转:由我们持有对对象的控制权(创建和管理),最常见的就是我们自己new一个对象,这就是控制正转;
控制反转:把对对象的控制权(创建和管理)交给IOC容器,有IOC来为我们创建与管理对象;这就是控制反转。
有了控制反转这个后,我们就可以随时随地让IOC容器为我们创建需要的对象;IOC容器会把创建好的对象Bean发送到需要使用的地方,这就是依赖注入DI。


2.spring的注入方式

  • 构造方法注入
  • set方法注入
  • 注解方式注入

3.spring提供了哪些依赖注入(DI)的方式

依赖注入:
    依赖:当前程序依赖于IOC容器,因为现在IOC具有对象的控制权,我们需要它来为我们创建对象或者引入外部资源;
    注入:IOC往需要使用的地方注入Bean

  • 自动注入(隐式)

       @Component:声明组件(声明将此类交给IOC容器管理)
       @ComponentScan:组件扫描(把指定路径扫描到的类交给IOC管理)
       @Autowired:自动装配

  • java注解注入(显式)

      自动注入简单易用,但是当我们引入到第三方库时就无法在第三方代码中自动装配,此时可以在建一个相关类的配置            类,并在类前加入@configuration声明这是一个spring的配置类,并在相关方法体中生成需要的bean对象返回,比如我        需要一个ToolClass类对象,这个对象时第三方库的,无法再第三方库插入代码;此时可以建一个toolConfig.java
      @Configuration
      public class toolConfig{
          @Bean
          public ToolClass getToolClassBean(){
              ToolClass toolClassBean=new ToolClass();
              return toolClassBean;
          }
      }
    这样把ToolClass这样的第三方的类对象交由IOC管理;

  • xml文件配置(显式)

       直接声明Bean:<bean id="", class=""/>
以上三种就是把Bean交由IOC管理方法


4./*与/**的区别

/*匹配某一级所有目录,/**匹配某一级所有目录及其所有子目录


5.spring中未被IOC容器管理的对象怎么获取到IOC中的对象

  • 通过applicationContext.getBean("bean名")获取。分析:需要创建一个ApplicationContext应用上下文对象,但是由于不知道容器中的对象有多少个,如果很多,那么构造一个ApplicationContext是非常消耗资源的,因此,此方法一般不推荐。
  • 通过WebApplicationContext.getBean()获取,流程是向WebApplicationUtis这个工具类的getWebApplicationContext(ServletContext sc)静态方法传入一个servletContext后返回得到WebApplicationContex。

6.spring中bean的生命周期

spring bean生命周期

7.注解@Param,@RequestParam,@PathParam,@PathVariable的作用

@Param:用在DAO层,用于处理接口到xml的参数传递问题

@RequestParam:同于Controller层,从request里取值,用于处理前端到controller的参数传递问题

@PathParam:从url字符串取值,只能取到url模板字符串里的参数值,不能取到后缀的参数值,是jboss包的一个实现

@PathVariable:功能与@PathParam一样,但是其是spring的一个实现

二.springMVC

1.springMVC工作流程

   springMVC工作流程


2.springMVC拦截器与过滤器的区别

  • 拦截器是基于反射的,过滤器基于函数回调
  • 拦截器不依赖servlet容器;过滤器依赖servlet容器
  • 拦截器只能拦截action请求,过滤器可以拦截几乎所有请求(包括静态资源请求)
  • 拦截器可以访问action请求的上下文和值栈里的对象,过滤器不能
  • 拦截器可以获取IOC容器的各个bean,如在拦截器注入service就可以调用业务;过滤器不行
  • 拦截器是被包裹在过滤器之中的

3.

三.mybatis

1.mybatis在xml的查询语句中${}与#{}的区别

${}是值替换,发生在动态sql解析阶段,解析完成就已经是一条完整的sql语句了,相当于使用Statement,有sql注入风险;

#{}变量占位符,传入后形成编译的sql语句,传入的变量在sql语句中形成一个占位符,相当于使用PreparedStatement;


2.mybatis中怎么样获取刚插入数据的自增主键值?

通过JDBC3.0提供的GeneratedKeys方式,实现主键回填
如果是在xml中配置,只需配置useGeneratedKeys="true" keyProperty="对应类的id属性"
    <insert id="addRole" keyproperty="roleId" parametertype="Role" usegeneratedkeys="true">
        insert into role(role_name) values(#{roleName})
    </insert>

如果是直接在java代码中,则需要在执行sql时指明

stmt.executeUpdate(
            "INSERT INTO autoIncTutorial (dataField) "
            + "values ('Can I Get the Auto Increment Field?')",
            Statement.RETURN_GENERATED_KEYS);// 向驱动指明需要自动获取generatedKeys!

四.springBoot

1.springboot相关概念

spring boot是spring开源组织下的后端框架,是spring组件一站式解决方案,主要是简化了使用spring的难度。具体表现为简化了繁重的配置,提供各种启动器,开发者能快速上手,让开发者从繁琐的配置工作中解放出来,让精力更多的集中在业务开发上。

2.springBoot的自动化配置原理

springBoot自动化配置原理在于其核心注解@SpringBootApplication,这是一个组合注解,主要包含了3个注解:@Configuration;@EnableAutoConfiguration;@ComponentScan

  • @Configuration:实现配置文件的功能
  • @EnableAutoConfiguration:实现自动(打开/关闭)配置的功能
  • @ComponentScan:实现spring组件扫描的功能

自动化配置重点是@EnableAutoConfiguration,我们点进去能看到它也是一个组合注解,其重点在于@Import注解,其导入了一个AutoConfigurationImportSelector类对象,具体配置原理我们继续点击这个类进去。

从图上我们可以发现AutoConfigurationImportSelector类提供了一个名为getCandidateConfigurations(译:获取候选配置)的方法,方法里通过SpringFactoriesLoader.loadFactoryNames扫描所有META-INF/spring.factories结构文件的jar包。下面我们看看具有这样结构的包是咋样的。

在这里我们发现具有这种结构的jar包中spring.factories中的内容是其jar包中所包含的类的全限定路径名,总的来看,大部分是一些自动配置类,自动配置类再去加载一些组件。至此我们明白了springBoot的自动化配置原理。

自动化配置原理总结:SpringBoot项目启动时,通过@SpringBootApplication注解下的@EnableAutoConfiguration注解下的@Inport注解,导入一个AutoConfigurationImportSelector类,通过调用该类的getCandidateConfigurations方法,方法内使用SpringFactoriesLoader.loadFactoryNames扫描所有具有META-INF/spring.factories文件结构的jar包,找到这些jar包内spring.factories文件所指出的所有类,并将这些类加载进springIOC容器中,由于文件内大部分是自动配置类xxxAutoConfiguration,所以加载进这些自动配置类后再由这些自动配置类加载相应组件到IOC容器。

3.starter的认识

starter是对依赖的合成封装。将使用某种功能所要用到的依赖jar包封装成一个对应模块的starter jar包,最终目的还是为了简化依赖配置。可以根据自定义starter。

4.在springboot中怎么配置才会使过滤器,监听器生效?

springboot将所有的实例交给Spring IOC容器管理,filter和listener自然也是,如果像写servlet写filter和listene,那么它们是不会生效的,因为不归IOC容器管理,那么我们有以下办法来解决。

  • 使用@Component注解把过滤器或者拦截器的类交给IOC管理,@WebFilter(urlPatterns = "/*")表示拦截所有请求
@Component
@Order(1)   // 执行顺序,多个拦截器指定顺序时使用
@WebFilter(urlPatterns = "/*")
public class CodeFilter implements Filter {
  • 首先在启动类中,注解@ServletComponentScan指定过滤器或拦截器的路径,完成filter和listener注册,@WebFilter表示拦截的请求
@ServletComponentScan("com.elife.springboot.filter")
public class SpringbootApplication {
}
@WebFilter(urlPatterns = "/*")
public class CodeFilter implements Filter {
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值