spring面试题

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 注入
  • 接口注入
posted @ 2023-02-03 08:34  对CSDN使用炎拳吧  阅读(19)  评论(0编辑  收藏  举报