【框架】单例bean是线程安全吗、AOP相关面试、事务失效场景
提问:spring框架中的单例bean是线程安全吗?
回答:不是线程安全的。
spring框架中有一个@Scope注解,默认值是singleton,单例的。
因为一般在spring的bean中都是注入无状态的对象,没有线程安全的问题,如果在bean中定义可修改的成员变量,是要考虑线程安全的,可以使用多例或者加锁来解决。
提问:什么是AOP,你们项目有没有用到AOP?
回答:AOP称为面向切面编程,用于将那些于业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取并封装一个可重用的模块,这个模块被命名为“切面”(Aspect)减少系统中的重复代码,降低了模块间的耦合度,同时提高了系统的可维护性。
常见的AOP使用场景:
·记录操作日志
·缓存处理
·spring中内置的事务处理
核心是:使用AOP中的环绕通知+切点表达(找到记录日志的方法),通过环绕统治的参数获取请求方法的参数(类,方法,注解,请求方式),获取到这些参数以后,保存到数据库
提问:spring中的事务是如何实现的?
回答:其本质是通过AOP功能,对方法前后进行拦截,在执行方法之前开启事务,在执行完目标方法之后根据执行情况提交或者回滚事务。
提问:spring中事务失效的场景有哪些?
回答:
·异常捕获处理
·抛出检查异常
·非public方法
1.异常捕获处理,自己处理了异常,没有抛出,解决方法:手动抛出
2.抛出异常检查,配置rollbackFor属性为Exception
3.非public方法导致事务失效,改为public

浙公网安备 33010602011771号