首页 > 其他分享 >spring面试题

spring面试题

时间:2023-02-03 08:44:05浏览次数:37  
标签:容器 面试题 Spring spring 代理 AOP 组件 Security

1.IOC控制反转

在一开始设计组件依赖的时候就考虑到未来出现改动的可能性,所有需要import组件的地方都被替换成了接口,任何业务组件都不再直接控制import哪个具体组件,而是把这个控制权交给spring的配置中心。

IOC控制反转最典型的应用就是Autowired注解。

Spring IOC 容器

Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。

AOP面向切面编程

什么是AOP?

在运行时,动态地将代码切入到类的指定方法、指定位置上的编程思想就是面向切面的编程。

AOP的好处了是把和主业务无关的事情,放到代码外面去做。

举个例子,你想给你的网站加上鉴权,

对某些url,你认为不需要鉴权就可以访问,

对于某些url,你认为需要有特定权限的用户才能访问,

如果你依然使用OOP,面向对象,那你只能在那些url对应的Controller代码里面,一个一个写上鉴权的代码。

如果你使用AOP,只需要在配置文件中配置相应的url的用户访问许可即可。

如何使用AOP?

代理模式

静态代理指我们手动生成一个代理类,代理UserController的saveUser()方法,实现鉴权操作。

class UserControllerProxy {
    private UserController userController;

    public void saveUser() {
        checkAuth();
        userController.saveUser();
    }
}

而SpringAOP是基于动态代理的,

如果要代理的对象,实现了某个接口,那么Spring AOP会使用JDK Proxy,去创建代理对象,

而对于没有实现接口的对象,就无法使用JDK Proxy去进行代理了,

这时候Spring AOP会使用Cglib,生成一个被代理对象的子类,来作为代理.

Spring Security安全管理

什么是Spring Security

Spring Security是基于Servlet的Filter

核心功能主要包括:

  • 认证 (你是谁)
  • 授权 (你能干什么)
  • 攻击防护 (防止伪造身份)

比如,对于username password认证过滤器来说,

  • 会检查是否是一个登录请求;
  • 是否包含username 和 password (也就是该过滤器需要的一些认证信息) ;
  • 如果不满足则放行给下一个。

如何使用Spring Security

假设你希望防止未经授权的用户访问“/ hello”。 此时,如果用户点击主页上的链接,他们会看到问候语,请求被没有被拦截。 你需要添加一个障碍,使得用户在看到该页面之前登录。您可以通过在应用程序中配置Spring Security来实现。

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http
            .authorizeRequests()
                .antMatchers("/", "/home").permitAll()
                .anyRequest().authenticated()
                .and()
            .formLogin()
                .loginPage("/login")
                .permitAll()
                .and()
            .logout()
                .permitAll();
    }
​
    @Autowired
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
        auth
            .inMemoryAuthentication()
                .withUser("user").password("password").roles("USER");
    }
}

Spring生命周期

Spring Bean的生命周期指的是Bean从创建到初始化再到销毁的过程,这个过程由IOC容器管理。

实例化(Instantiation)
属性赋值(Populate)
初始化(Initialization)
销毁(Destruction)

Spring Framework中有多少个模块

  • Spring 核心容器
  • 数据访问/集成(数据库交互)
  • Web
  • Instrumentation
  • Test

依赖注入

在依赖注入中,您不必创建对象,但必须描述如何创建它们。

您不是直接在代码中将组件和服务连接在一起,而是描述配置文件中哪些组件需要哪些服务。

由 IoC 容器将它们装配在一起。

  • 构造函数注入
  • setter 注入
  • 接口注入

标签:容器,面试题,Spring,spring,代理,AOP,组件,Security
From: https://www.cnblogs.com/cnleika/p/17087953.html

相关文章

  • SpringBoot发送虚拟请求~
    1、创建一个测试用的TestController@RestControllerpublicclassTestController{@GetMapping("/test")publicStringtest(){System.out.println(......
  • Redis面试题整理
    Redis是单线程还是多线程?Redis6.0的版本之前的单线程是指网络IO和键值对读写是由单个线程去完成的.而Redis6.0增加的多线程,是指Redis在网络请求的情况下是采用了多线......
  • 关于Spring Data Jpa的分页、跨表查询
    分页jqa的query使用原生sql查询​​(nativeQuery=true)​​​的时候不支持排序的,需要在sql里面加上:​​ORDERBY?#{#pageable}​​​​SpringDataJpa本地查询(带分页方式......
  • spring事务传播属性和隔离
    REQUIRES_NEW和NESTED的区别REQUIRES_NEW时,内层事务与外层事务就像两个独立的事务一样,一旦内层事务进行了提交后,外层事务不能对其进行回滚。两个事务互不影响。​​两个事......
  • spring boot + spring cache 实现两级缓存(redis + ehcache)
    前言本文参考了​​springboot+springcache实现两级缓存(redis+caffeine)​​。处理流程与​​springboot+springcache实现两级缓存(redis+caffeine)​​一致:事......
  • Spring中Bean的生命周期
     作为java开发程序员在面试的时候通常都会被问到Spring完整的生命周期,但是大多数的开发者都回答的不够完整,其实在BeanFactory这个类中Spring源码的作者已经很好的告诉......
  • Spring Boot + WebSocket 实时监控异常
    本文已经收录到Github仓库,该仓库包含计算机基础、Java基础、多线程、JVM、数据库、Redis、Spring、Mybatis、SpringMVC、SpringBoot、分布式、微服务、设计模式、架构、校......
  • springboot(一)
    基础1.介绍与入门1.1介绍SpringBoot是由Pivotal团队提供的全新框架,其设计目的是用来简化Spring应用的初始搭建以及开发过程。Spring程序缺点依赖设置繁琐以前写S......
  • Linux基础:文件相关信息、文件索引信息、链接信息、系统时间、机器克隆、定时任务、par
    目录一、文件相关信息二、文件索引信息三、链接信息四、系统时间五、机器克隆六、定时任务七、paramiko模块八、公钥私钥九、paramiko其他操作十、代码封装十一、面试题回......
  • Spring获取Bean的9种方式
    前言随着SpringBoot的普及,Spring的使用也越来越广,在某些场景下,我们无法通过注解或配置的形式直接获取到某个Bean。比如,在某一些工具类、设计模式实现中需要使用到Spring容......