欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > Spring相关的面试题

Spring相关的面试题

2025/2/23 0:45:47 来源:https://blog.csdn.net/weixin_62432037/article/details/140831611  浏览:    关键词:Spring相关的面试题

1.Spring框架的单例bean是线程安全的吗?

        不是线程安全的。Spring框架中又一个@Scope注解,默认的值是singleton,单例的。因为一般在spring的bean中都是注入无状态的对象,没有线程安全问题,如果在bean中定义了可修改的成员变量,可以考虑线程的安全问题,或者使用多例或者加锁来解决。

        当多个用户同时请求一个服务时,容器会给每一个请求分配一个线程,这个是多线程并发执行请求对应的业务逻辑,如果改处理逻辑中对该单列状态的修改,则要考虑线程同步问题。

2.什么是AOP,你们项目中有没有使用AOP?

 (1)什么是AOP?

                AOP是面向切面编程,用于将那些与业务无关,但却对多个对象产生影响的公共行为和逻辑,抽取公共模块复用,降级了耦合。

 (2) 在项目中有没有使用过AOP?

                记录操作日志,缓存,spring实现的事务。

                记录操作日志:使用aop中的环绕通知+切点表达式(找到要记录事务的方法),通过环绕通知的参数获取请求的参数(类,方法,注释,请求方法,ip地址等),获取到这些参数以后,保存到数据库。

                如何自己定义一个注解?                

@Component
@Aspect
public class SysAspect{// 连接点 加入Log注解 @Log(name = "xxxx")@Pointcut("@annotation(com.xxx.annotation.Log)")private void pointcut(){}// 环绕通知@Around("pointcut()")public Object around(ProceedingJoinPoint joinPoint) throw Throwable{//获取用户名//需要通过解析seesion或token获取//获取被增强类和方法的信息Signature signature = joinPoint.getSignature();MethodSignature methodSignature = (MethodSignature) signature;//获取被增强方法的名称Method method = methodSignature.getMethod();//从方法中解析注解if(method!=null){Log logAnnotation = method.getAnnotation(Log.class);System.out.println(logAnnotation.name());}// 通过工具类获取Request对象RequestAttributes reqa = RequestContextHolder.getRequestAttributes();ServletRequetAttributes sra = (ServletRequestAttributes)reqa;HttpServletRequest request = sra.getRequest();//访问url//请求方法//登录ip//操作时间}
}@public @interface Log{public String name() default "";
}

 (3)Spring中的事务是如何实现的?

                其本质是通过AOP功能,对方法前后进行拦截,在执行方法前开启事务,在执行玩目标方法之后执行提交或者事务的回滚。

                      

3.什么时候会导致Spring的事务失效?

        (1)异常的捕捉处理。

                   事务通知只有捕捉到目标抛出的异常,才能进行后续的后滚处理,如果目标异常自己处理异常,事务通知无法知道。

                      解决:在catch块中添加 throw new RuntimeException(e)抛出。

        (2)抛出检查异常

                原因:Spring默认只会回滚非检查异常。

                解决:配置rollbackFor属性

                            @Transactional(rollbackFor=Exception.class)

        (3) 非public修饰方法

4.Srping的bean的生命周期

后置助理器

 

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词