SSM面试题

这篇博客详细探讨了Spring、SpringMVC和Mybatis(SSM)框架的各个方面,包括AOP、IOC原理、Spring框架的核心概念、事务管理、Mybatis的一级和二级缓存、以及它们在实际开发和面试中的应用。博主强调了SSM框架如何降低程序耦合,提高了开发效率,并介绍了面试中常见的SSM相关问题和解答。
摘要由CSDN通过智能技术生成

Spring AOP 的应用场景、 Aop 原理、好处?

答:Aop是Spring两大核心之一,叫做面向切面编程,它是oop的延续

  1. 它主要用于解决方法之间的依赖,如声明式事务管理,它的实现原理是动态代       理,  分为jdk的动态代理和cglib动态代理,

Jdk动态代理只针对于接口操作,目标类必须实现一个接口,他两是兄弟关系

Cglib既可以代理有接口的类,也可以代理无接口的类。目标类不能用final修饰,代理是目标类的子类

2.作用:在程序运行期间,不修改源码对已有方法进行增强。

可以减少重复代码,提高开发效率以及维护方便!

AOP相关术语:

Joinpoint( 连接点):目标对象的所有方法

Pointcut( 切入点):连接点中需要增强的方法

Advice( 通知/ 增强):增强的代码,类型:前置通知,后置通知,异常通知,最终通知,环绕通知

Weaving( 织入):是指把增强应用到目标对象来创建新的代理对象的过程。

Aspect( 切面):是切入点和通知(引介)的结合。

注意:spring框架默认情况下,会对有接口的类使用proxy代理。没有接口的类使用cglib代理(面试)

Spring 中 IOC 的作用与原理?对象创建的过程。

答:

作用与原理:IOC是Spring两大核心之一,叫做控制反转,它的作用是解决类与类之间的依赖,它还有个功能叫作依赖注入,将对象的创建交给Spring的容器管理,它的原理是利用反射创建对象

创建的过程:Spring的容器创建对象有三种方式,分别是默认无参构造函数创建,静态工厂的静态方法创建,实例工厂的方法创建.

解析配置文件中配置的Bean信息,根据class属性中指定的全限定类名创建该类的对象存入spring容器中,该容器的本质是一个map集合,bean标签中的id作为key,class作为value,将来可以使用beanFatory等对象从map中根据key取出对象!

介绍 spring 框架。

答:spring是一款轻量级的javaEE开源框架,控制反转和面向切面编程是它的两大内核,主要作用是降低程序之间的耦合,它提供了展示层的框架springMVC以及持久层的框架springMybatis等,它还可以整合其它框架进行开发

小结:

1.注解方式的通知有顺序要求,使用注解配置代理对象建议使用环绕通知(该通知是手动整合上面四种通知)

2.aop是一种切面编程思想,当我们需要目标类的对象时,spring实际返回给我们的是代理对象,代理对象执行involve方法,实际上仍然是使用目标类的对象执行方法!

3.可以使用proxy-target-class属性指定为true表示使用cglib动态代理!

4.aop原理:

         以前的事务都是在dao层自动提交,多次对数据库的操作就会生成多个连接对象,也就是多个独立的事务对象,导致转账功能的异常.

   解决思路:

         需要将转账的功能使用同一个事务进行管理(同一个连接对象),将事务的提交转移到业务层进行手动提交(有个属性),保证一个线程对应一个连接对象,当使用完毕后归还连接对象,并将连接对象和线程进行解绑!

  保证一个线程对应一个连接对象的做法:

         使用ThreadLocal(一个线程对应一个该对象)获取连接,如果获取不到则从数据源中获取一个连接对象,并存入ThreadLocal对象,如果已经有的直接取出该连接对象(连接对象与线程绑定),从而保证,一个线程只有一个连接对象.先拿出连接对象再操作事务!

11.单元测试中的方法不能有返回值,也不能有参数!否则初始化错误!

12.别人写的类使用xml配置,自己写的类使用注解配置,建议以后两种结合使用

  1. Spring 常见创建对象的注解?

创建bean对象(前提是提供包扫描):

@Component :用于非三层架构中的类的对象创建

@Controller:用于web层对象的创建

@Service:用于业务层对象的创建

@Repository:用于dao层对象的创建

@Transactional:注解方式配置事务

依赖注入(本地):

@Autowired:按照类型注入对象

@Qualifier:一般与Autowired一起使用,指定匹配的id注入对象

@Resource:直接按照给定的name值去容器中匹配ID

@Value:用于注入基本类型和String类型的数据

1.SpEL:#{ 表达式}

2.EL表达式:${ 表达式}

  1. 写在Mybatis的配置文件中,那么就是字符串拼接
  2. 写在JSP中,从四大域中取值(pageContext,Request,Session,Application)

3.Jquery$(选择器):$()

4.MybatisOGNL表达式:#{}

  1. Spring 中用到的设计模式。

答:Spring容器创建bean对象时用到工厂模式

指定scope属性时用到单例设置模式

Spring 的优点、缺点

优点:

  1. 提供了IOC和DI,降低了类与类之间的耦合,将对象交由 spring容            器管理,使用autowrite注入
  2. aop采用动态代理实现,降低了方法之间的耦合
  3. 可以整合其它框架

缺点(springBoot解决):

  1. 配置文件繁琐
  2. 坐标配置繁琐

Spring Bean 的作用域之间有什么区别?

答:scope属性,用于指定bean的作用范围
singleton:单例的(默认值)

prototype:多例的

request:作用于web应用的请求范围

session:作用于web应用的会话范围

global-session:作用于集群环境的会话范围(全局会话范围),当不是集群环境时,它就是session
 
 
 
 
 
Bean对象的生命周期:

       单例对象

回答: 首先,@SessionAttributes注解可以在类上面加上,里面包含的字符串就是要放入session里面的key。通过Jackson框架可以将Java对象直接转化成可以识别的Json对象。具体步骤包括加入Jackson.jar,配置json的映射,以及在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解。\[1\] MyBatis的好处是可以将SQL语句从Java源程序中独立出来,放在单独的XML文件中编写,给程序的维护带来了很大便利。此外,MyBatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,简化了Java数据库编程的重复工作。相比于全自动ORM框架,如Hibernate,MyBatis需要程序员自己编写SQL语句,因此能够更灵活地控制SQL语句,实现更高的查询效率,能够完成复杂查询。\[2\] 关于MyBatis的缓存,它可以提高查询性能。MyBatis的缓存分为一级缓存和二级缓存。一级缓存是SqlSession级别的缓存,它默认开启,可以减少对数据库的访问次数。二级缓存是Mapper级别的缓存,可以跨SqlSession共享数据,需要手动配置开启。使用缓存可以减少对数据库的访问,提高系统性能。但是需要注意缓存的更新和失效机制,以保证数据的一致性。\[3\] #### 引用[.reference_title] - *1* *2* *3* [JavaSSM框架精选50道面试题](https://blog.csdn.net/qq_41735004/article/details/87199651)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值