1. 何为Spring Bean容器?Spring Bean容器与Spring IOC容器有什么不同吗?
答案:
Spring Bean容器是Spring框架中用于管理Bean(即Java对象)的容器,负责Bean的创建、配置、组装和管理。Spring IOC(控制反转)容器是Bean容器的具体实现,它通过依赖注入(DI)机制来实现控制反转。实际上,Spring Bean容器和Spring IOC容器是同一个概念,通常互换使用,但IOC容器更强调控制反转的原则。
2. Spring IOC如何理解?
答案:
Spring IOC(控制反转)是一种设计原则,它将对象的创建和依赖关系的管理从应用程序代码中转移到容器中。容器负责实例化、配置和组装Bean,从而降低组件之间的耦合度。IOC通过依赖注入(DI)实现,使得对象不需要直接创建依赖对象,而是由容器注入。
3. Spring DI如何理解?
答案:
Spring DI(依赖注入)是IOC的具体实现方式,指容器在运行时动态地将依赖对象注入到目标对象中。主要有三种注入方式:构造器注入、Setter方法注入和字段注入。DI减少了代码的耦合性,提高了可测试性和可维护性。
4. Spring中基于注解如何配置对象作用域?以及如何配置延迟加载机制?
答案:
-
作用域配置:使用
@Scope注解,例如@Scope("singleton")或@Scope("prototype")。 -
延迟加载:使用
@Lazy注解,例如@Lazy(true),表示Bean在第一次被请求时才初始化。
5. Spring工厂底层构建Bean对象借助什么机制?当对象不使用了要释放资源,目的是什么?何为内存泄漏?
答案:
-
构建机制:Spring通过反射机制动态创建Bean实例。
-
释放资源目的:避免资源浪费和提高性能,防止内存泄漏。
-
内存泄漏:指程序中已分配的内存未能正确释放,导致内存占用持续增加,最终可能引发程序崩溃。
6. 描述Spring MVC处理流程及应用优势?
答案:
-
处理流程:
-
用户请求发送到DispatcherServlet。
-
DispatcherServlet查询HandlerMapping找到对应的Controller。
-
Controller处理请求并返回ModelAndView。
-
ViewResolver解析视图名称。
-
视图渲染并返回响应。
-
-
优势:松散耦合、易于测试、支持注解驱动、集成灵活。
7. Spring中的事务处理方式及优缺点?
答案:
-
方式:编程式事务(代码中手动管理)和声明式事务(通过注解或XML配置)。
-
优缺点:
-
编程式:灵活但代码侵入性强。
-
声明式:简洁但调试复杂。
-
8. MyBatis应用中#与$有什么异同点?
答案:
-
#是预编译处理,防止SQL注入,适用于参数传递。 -
$是字符串拼接,有SQL注入风险,适用于动态表名或列名。 -
相同点:都用于MyBatis映射文件中引用参数。
9. MyBatis应用动态SQL解决了什么问题?
答案:
动态SQL解决了根据条件动态生成SQL语句的问题,避免了在Java代码中拼接SQL的繁琐和错误,提高了代码可读性和维护性。
10. Shiro框架权限管理时的认证和授权流程描述?
答案:
-
认证:用户提供凭证(如用户名/密码),Shiro验证身份。
-
授权:认证成功后,Shiro根据用户角色和权限检查访问资源是否被允许。
11. BeanFactory和ApplicationContext有什么区别?
答案:
-
BeanFactory是基础容器,提供基本DI功能,延迟加载Bean。
-
ApplicationContext是高级容器,扩展了BeanFactory,支持事件发布、国际化等,默认即时加载Bean。
12. 请解释Spring Bean的生命周期?
答案:
-
实例化Bean
-
依赖注入
-
调用BeanNameAware方法
-
调用BeanFactoryAware方法
-
调用PreInitialization方法(BeanPostProcessor)
-
调用InitializingBean的afterPropertiesSet方法
-
调用自定义init方法
-
调用PostInitialization方法(BeanPostProcessor)
-
Bean就绪
-
容器关闭时调用DisposableBean的destroy方法或自定义destroy方法。
13. Spring Bean的作用域之间有什么区别?
答案:
-
singleton:每个容器一个Bean实例(默认)。
-
prototype:每次请求新实例。
-
request:每个HTTP请求新实例(Web环境)。
-
session:每个HTTP会话新实例(Web环境)。
-
globalSession:全局HTTP会话(Portlet环境)。
14. 使用Spring框架的好处是什么?
答案:
-
降低耦合度,提高模块化。
-
方便测试,支持依赖注入。
-
提供声明式事务管理。
-
集成其他框架(如Hibernate、MyBatis)。
-
支持AOP,增强功能。
15. Spring中用到了那些设计模式?
答案:
工厂模式、单例模式、代理模式、模板方法模式、观察者模式、适配器模式等。
16. Spring如何保证Controller并发的安全?
答案:
Spring Controller默认是单例的,但通过避免使用实例变量(改为使用局部变量或ThreadLocal)来保证线程安全。建议Controller设计为无状态。
17. 在Spring中如何注入一个java集合?
答案:
在XML配置中使用<list>、<set>、<map>等标签,或在注解中使用@Autowired注入集合类型。
18. Spring支持的事务管理类型?
答案:
编程式事务和声明式事务。声明式事务又基于XML或注解(如@Transactional)。
19. Spring框架的事务管理有哪些优点?
答案:
-
统一的事务管理接口。
-
支持声明式事务,减少代码侵入。
-
集成多种事务资源(如JDBC、Hibernate)。
-
提供事务传播行为和隔离级别配置。
20. Spring MVC的主要组件?
答案:
DispatcherServlet、HandlerMapping、Controller、ViewResolver、View等。
21. SpringMvc怎么和AJAX相互调用的?
答案:
Controller方法返回JSON数据(使用@ResponseBody或@RestController),前端通过AJAX请求调用这些方法。
22. mybatis的缓存机制,一级,二级介绍一下?
答案:
-
一级缓存:SqlSession级别,默认开启,在同一个SqlSession中有效。
-
二级缓存:Mapper级别,需手动开启,跨SqlSession共享数据。
23. SpringMVC与Struts2的区别?
答案:
-
Spring MVC基于方法拦截,Struts2基于类拦截。
-
Spring MVC集成更紧密,Struts2配置更复杂。
-
Spring MVC性能更高,Struts2漏洞较多。
24. mybatis的基本工作流程?
答案:
-
加载配置(XML或注解)。
-
创建SqlSessionFactory。
-
创建SqlSession。
-
执行SQL。
-
返回结果。
-
关闭SqlSession。
25. 什么是MyBatis的接口绑定,有什么好处?
答案:
接口绑定指MyBatis将Mapper接口与XML映射文件关联,通过动态代理实现。好处是无需编写实现类,代码更简洁。
26. MyBatis的编程步骤?
答案:
-
创建SqlSessionFactory。
-
创建SqlSession。
-
获取Mapper接口实例。
-
调用Mapper方法。
-
提交事务(如需)。
-
关闭SqlSession。
27. JDBC编程有哪些不足之处,MyBatis是如何解决这些问题的?
答案:
-
JDBC不足:代码冗余、手动处理连接和结果集、SQL注入风险。
-
MyBatis解决:自动映射、参数预编译、提供缓存机制。
28. MyBatis的优缺点?
答案:
-
优点:灵活、SQL可控、性能好。
-
缺点:需手动编写SQL、移植性差。
29. 谈谈你对SpringMVC的理解?
答案:
Spring MVC是基于Spring的Web框架,采用MVC模式,通过DispatcherServlet核心控制器处理请求,支持注解驱动和视图解析。
30. 简述Mybatis的插件运行原理,以及如何编写一个插件?
答案:
-
原理:基于动态代理,拦截Executor、StatementHandler等组件的方法。
-
编写插件:实现Interceptor接口,重写intercept方法,并配置@Intercepts注解。
31. Mybatis是否支持延迟加载?如果支持,它的实现原理是什么?
答案:
支持。原理是通过动态代理,在访问关联对象时才触发SQL查询。
32. Mybatis能执行一对一、一对多的关联查询吗?都有哪些实现方式,以及它们之间的区别?
答案:
能。方式:
-
嵌套查询:分多次SQL查询。
-
嵌套结果:单次SQL连接查询。
区别:嵌套查询有N+1问题,但灵活;嵌套结果效率高但SQL复杂。
33. Mybatis是如何将sql执行结果封装为目标对象并返回的?都有哪些映射形式?
答案:
通过反射或结果映射(ResultMap)。映射形式:自动映射(基于列名)和手动映射(指定ResultMap)。
34. Mybatis映射文件中,如果A标签通过include引用了B标签的内容,请问,B标签能否定义在A标签的后面,还是说必须定义在A标签的前面?
答案:
B标签可以定义在A标签后面,MyBatis解析时会将整个XML文档加载后再处理引用。
35. MyBatis里面的动态Sql是怎么设定的?用什么语法?
答案:
使用OGNL表达式,在XML中通过<if>、<choose>、<foreach>等标签实现。
36. Mybatis都有哪些Executor执行器?它们之间的区别是什么?
答案:
-
SimpleExecutor:每次执行新Statement。
-
ReuseExecutor:复用Statement。
-
BatchExecutor:批量执行。
区别在于性能和资源管理。
37. 为什么说Mybatis是半自动ORM映射工具?它与全自动的区别在哪里?
答案:
Mybatis需手动编写SQL,而全自动ORM(如Hibernate)自动生成SQL。半自动更灵活,全自动更便捷。
38. 简单介绍下你对mybatis的理解?
答案:
MyBatis是持久层框架,封装了JDBC,通过XML或注解配置SQL,支持动态SQL和缓存,简化数据库操作。
39. 介绍一下Spring的事物管理?
答案:
Spring提供统一事务管理,支持编程式和声明式事务,基于AOP实现,可配置传播行为和隔离级别。
40. SSM优缺点、使用场景?
答案:
-
优点:轻量级、灵活、集成简单。
-
缺点:配置较复杂。
-
使用场景:中小型Web项目,需灵活SQL控制。
41. SpringMVC的工作流程?
答案:
同问题6的处理流程。
42. 如果你也用过struts2.简单介绍下springMVC和struts2的区别有哪些?
答案:
同问题23。
43. 怎么样把数据放入Session里面?
答案:
在Controller中使用HttpSession的setAttribute方法,例如session.setAttribute("key", value)。
44. 讲下SpringMvc的执行流程?
答案:
同问题6。
45. MyBatis(IBatis)的好处是什么?
答案:
简化JDBC代码、SQL可控、缓存机制、动态SQL支持。
46. 解释Spring支持的几种bean的作用域?
答案:
同问题13。
47. 什么是bean的自动装配?
答案:
Spring容器自动注入依赖关系,无需明确配置。方式:byName、byType、constructor等。
48. 什么是基于Java的Spring注解配置? 给一些注解的例子?
答案:
使用注解替代XML配置。例子:@Component、@Autowired、@Configuration、@Bean。
49. 使用Spring通过什么方式访问Hibernate?
答案:
通过HibernateTemplate或使用@Repository注解结合Hibernate SessionFactory。
50. 如何通过HibernateDaoSupport将Spring和Hibernate结合起来?
答案:
继承HibernateDaoSupport类,并注入SessionFactory,使用getHibernateTemplate()方法操作数据库。
51. 在Spring AOP中,连接点和切入点的区别是什么?
答案:
-
连接点:程序执行的点(如方法调用)。
-
切入点:匹配连接点的表达式,定义哪些连接点被拦截。
52. AOP作用是什么,底层如何实现在哪些地方会用到,分别简述切面,切入点和通知?
答案:
-
作用:解耦横切关注点(如日志、事务)。
-
底层实现:动态代理(JDK或CGLIB)。
-
使用场景:事务管理、安全、日志。
-
切面:模块化横切关注点的类。
-
切入点:定义拦截规则。
-
通知:切面在连接点执行的动作(如前置、后置通知)。
53. Spring中AutoWired和Resource之间区别是什么?
答案:
-
@Autowired按类型注入,是Spring注解。 -
@Resource按名称注入,是J2EE注解。 -
@Autowired需配合@Qualifier指定名称,@Resource默认按名称。
51万+

被折叠的 条评论
为什么被折叠?



