当前位置: 首页 > article >正文

spirng相关面试题

spinrg

spring的bean

spring的bean是不是单例的?

spring的bean默认是单例的single。。注解标识

spring的单例bean是不是线程安全的?

单例bean如果内部的成员不变就是线程安全的,变的话就不是

spring的AOP

AOP是什么?

aop是切面编程,用于将那些与业务无关的对多个对象产生影响的公共内容抽取,共用复用,降低耦合

spirng的AOP通知有?

AOP通知

  1. 前置通知(Before advice):在目标方法执行之前执行,可以通过修改传入参数或者阻止目标方法的执行来改变目标方法的行为。

  2. 后置通知(After returning advice):在目标方法成功执行后执行,可以访问目标方法执行返回的结果,并对其进行处理。

  3. 异常通知(After throwing advice):在目标方法抛出异常时执行,可以捕获和处理异常信息,或者重新抛出异常。

  4. 最终通知(After advice):在目标方法执行完成后无论是否发生异常都会执行,通常用于释放资源等操作。

  5. 环绕通知(Around advice):在目标方法执行前后都执行,可以自由控制目标方法的执行过程,包括是否执行目标方法以及何时执行目标方法等。

项目中使用AOP?

我的项目中使用了aop的环绕通知+切点表达式(切哪里),记录日志,包含请求参数,路径,方法,方式

spring的事务实现?

spring的事务是通过aop的前后通知实现的,在前置通知里开启一个事务,在后置通知里面监听执行是否出错然后进行回滚

spring的事务失效?

1.自己捕获了异常,没有抛出,没有检查到异常不会回滚

2.抛出检查异常,检查范围太大没有检查到异常不会回滚

3.非public方法失效,因为spring的事务是根据AOP的,AOP只会拦截public的方法

4.内部调用,因为同一个类不会创建多个代理对象

spring的bean生命周期?

public class Dog implements BeanNameAware, InitializingBean, DisposableBean {
    private String name;
    public Dog(){
        System.out.println("1.实例化");
    }

    public void setName(String name){
        System.out.println("2.依赖注入");
        this.name = name;
    }

    public void init(){
        System.out.println("6.初始化");
    }

    public void myDestroy(){
        System.out.println("10.销毁");
    }

    @Override
    public void setBeanName(String name) {
        System.out.println("3.设置beanName");
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        System.out.println("5.InitialingBean接口");
    }
    @Override
    public void destroy() throws Exception {
        System.out.println("9.DisposableBean接口");
    }
}
public class MyProcessor implements BeanPostProcessor {
    public Object postProcessBeforeInitialization(Object bean, String beanName) {
        if (bean instanceof Dog||beanName.equals("dog")) {
            System.out.println("4.初始化前");
        }
        return bean;
    }

    public Object postProcessAfterInitialization(Object bean, String beanName) {
        if (bean instanceof Dog||beanName.equals("dog")) {
            System.out.println("7.初始化后");
        }
        return bean;
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <bean id="dog" class="com.wn.older.Bean.Dog" init-method="init" destroy-method="myDestroy">
        <property name="name" value="旺财"/>
    </bean>
    <bean id="myProcessor" class="com.wn.older.Bean.MyProcessor"/>
</beans>
public class AppTest {
    @Test
    public void testApp()
    {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        context.getBean(Dog.class);
        System.out.println( "8.使用bean");
        //close
        ((ClassPathXmlApplicationContext)context).close();
    }
}
Bean的生命周期
5步骤
1.实例化
2.依赖注入
3.初始化
4.使用bean
5.销毁bean

7步骤
1.实例化
2.依赖注入
#3.初始化前
4.初始化
#5.初始化后
6.使用bean
7.销毁bean

10步骤
1.实例化                           --调用构造方法
2.依赖注入						    --成员赋值
#3.BeanNameAware BeanFactoryAre	  --调用setbeanname方法为beanName赋值
4.初始化前							--初始化之前调用的方法
#5InitialingBean接口				 --调用afterpropertiesSet方法
6.初始化							--调用自定义初始化方法
7.初始化后							--初始化之后调用的方法
8.使用bean						--拿到bean的上下文
#9.DisposableBean接口				--销毁前调用的接口
10.销毁bean						--销毁调用

http://www.kler.cn/a/563676.html

相关文章:

  • 云原生(五十七) | 阿里云CDN基本概念
  • 力扣LeetCode:1472 设计浏览器历史记录
  • Ubuntu 下 nginx-1.24.0 源码分析 - pool->cleanup
  • Graph and GNN——图的表示与图神经网络的介绍与应用
  • 青少年编程与数学 02-010 C++程序设计基础 11课题、程序结构
  • 手机放兜里,支付宝“碰一下”被盗刷?
  • Selenium八大元素定位方式
  • Docker 基本概念[SpringBoot之Docker实战系列] - 第536篇
  • 机试刷题_NC52 有效括号序列【python】
  • 基于 Python 的网络监控系统开发全解
  • 【我的 PWN 学习手札】IO_FILE 之 利用IO_validate_vtable劫持程序流
  • Linux(Centos 7.6)命令详解:uniq
  • 从 0 到 1,用 Python 构建超实用 Web 实时聊天应用
  • 【QT】QLinearGradient 线性渐变类简单使用教程
  • 深入解析Java线程优先级的奥秘
  • 文件上传-Windows点号绕过
  • kafka-新增topic副本数
  • 【第八节】C++设计模式(结构型模式)-Decorator(装饰器)模式
  • 【Python爬虫(86)】元宇宙浪潮下,Python爬虫能否乘风破浪?
  • python单例模式魔法方法