SSM(2)面试题

16. BeanFactory 接口和 ApplicationContext 接口有什么区别 ?
答案:
1. ApplicationContext 接口继承BeanFactory接口,Spring核心工厂是BeanFactory ,BeanFactory采取延迟加载,第一次getBean时才会初始化Bean, ApplicationContext是会在加载配置文件时初始化Bean。
2. ApplicationContext是对BeanFactory扩展,它可以进行国际化处理、事件传递和bean自动装配以及各种不同应用层的Context实现
3. 开发中基本都在使用ApplicationContext, web项目使用WebApplicationContext ,很少用到BeanFactory
17. Spring里面applicationContext.xml文件能不能改成其他文件名?
答案:
1. ContextLoaderListener是一个ServletContextListener, 它在你的web应用启动的时候初始化。
2. 缺省情况下, 它会在WEB-INF/applicationContext.xml文件找Spring的配置。
3. 你可以通过定义一个<context-param>元素名字为”contextConfigLocation”来改变Spring配置文件的位置。
18. SpringMVC如何解决线程安全性问题?
答案: 1. SpringMVC中的Controller默认是单例的,因此有可能有多个请求访问同一个Controller实例,从而有可能产生线程安全问题。 2. 因此尽量避免在Controller中使用实例变量 3. 使用ThreadLocal变量。
19. 什么是事务传播?
答案:
1. 事务传播行为就是多个事务方法相互调用时,事务如何在这些方法间传播。
20. 介绍一下Spring的事务管理
答案:
1. 事务就是对一系列的数据库操作(比如插入多条数据)进行统一的提交或回滚操作,如果插入成功,那么一起成功,如果中间有一条出现异常,那么回滚之前的所有操作。
2. 开发中为了避免这种情况一般都会进行事务管理。Spring中也有自己的事务管理机制,一般是使用TransactionMananger进行管理,可以通过Spring的注入来完成此功能。
3. spring提供了几个关于事务处理的类:
1. TransactionDefinition //事务属性定义
2. TranscationStatus //代表了当前的事务,可以提交,回滚。
3. PlatformTransactionManager这个是spring提供的用于管理事务的基础接口。
21. 解释一下Spring AOP里面的几个名词
答案:
1. 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子。 在Spring AOP中,切面可以使用通用类(基于模式的风格) 或者在普通类中以 @Aspect 注解(@AspectJ风格)来实现。
2. 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。 在Spring AOP中,一个连接点 总是 代表一个方法的执行。 通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。
3. 通知(Advice):在切面的某个特定的连接点(Joinpoint)上执行的动作。通知有各种类型,其中包括“around”、“before”和“after”等通知。 通知的类型将在后面部分进行讨论。许多AOP框架,包括Spring,都是以拦截器做通知模型, 并维护一个以连接点为中心的拦截器链。
4. 切入点(Pointcut):匹配连接点(Joinpoint)的断言。通知和一个切入点表达式关联,并在满足这个切入点的连接点上运行(例如,当执行某个特定名称的方法时)。 切入点表达式如何和连接点匹配是AOP的核心:Spring缺省使用AspectJ切入点语法。
5. 引入(Introduction):(也被称为内部类型声明(inter-type declaration))。声明额外的方法或者某个类型的字段。 Spring允许引入新的接口(以及一个对应的实现)到任何被代理的对象。例如,你可以使用一个引入来使bean实现 IsModified 接口,以便简化缓存机制。
6. 目标对象(Target Object): 被一个或者多个切面(aspect)所通知(advise)的对象。也有人把它叫做 被通知(advised) 对象。 既然Spring AOP是通过运行时代理实现的,这个对象永远是一个 被代理(proxied) 对象。
7. AOP代理(AOP Proxy): AOP框架创建的对象,用来实现切面契约(aspect contract)(包括通知方法执行等功能)。 在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。 注意:Spring 2.0最新引入的基于模式(schema-based)风格和@AspectJ注解风格的切面声明,对于使用这些风格的用户来说,代理的创建是透明的。
8. 织入(Weaving):把切面(aspect)连接到其它的应用程序类型或者对象上,并创建一个被通知(advised)的对象。 这些可以在编译时(例如使用AspectJ编译器),类加载时和运行时完成。 Spring和其他纯Java AOP框架一样,在运行时完成织入。
22. SpringMVC如何实现文件上载步骤?
1. RFC1867 规定了HTTP文件上载协议
2. 客户端
o form标签中使用属性 ENCTYPE="multipart/form-data" METHOD=POST
o 使用 input type=file 标签选择文件
3. 服务器端
o 导入commons-fileupload 组件
o 配置文件上载处理器
o 在控制器方法声明MultipartFile 类型变量接收上载文件。
23. SpringMVC如何实现Excel文件下载?
1. 利用 Apache POI API生成Excel
2. 在控制器中设置 ContentType 为Excel文件类型
3. 在控制器中设置 Content-Disposition 设定下载文件名

### SSM框架常见面试题总结 #### 1. SSM框架的核心概念 SSM框架由Spring、Spring MVC和MyBatis三个部分组成。其中,Spring作为核心容器负责管理Bean的生命周期以及提供IoC/DI功能;Spring MVC用于处理Web请求和响应;而MyBatis则作为一个持久化框架,专注于SQL操作。 - Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架[^3]。 - MyBatis专注于SQL本身,适合对性能要求高或需求变化频繁的项目[^4]。 #### 2. IoC与DI的区别 IoC(Inversion of Control),即控制反转,是一种设计思想,指将对象创建的权利交给容器完成。DI(Dependency Injection),即依赖注入,是IoC的具体实现方式之一。通过XML配置文件或注解(@Autowired等),Spring能够自动装配Bean之间的依赖关系。 #### 3. Spring中的AOP机制 AOP(Aspect-Oriented Programming)关注的是程序的功能模块划分问题。它允许开发者定义横切逻辑,并将其独立于业务逻辑之外进行维护。在Spring AOP中,可以通过@AspectJ注解的方式实现切面编程[^1]。 #### 4. Bean的作用域及其线程安全性 Spring中的Bean默认采用Singleton作用域,意味着整个应用程序上下文中只有一个实例存在。对于多线程环境下的访问,需注意其线程安全性问题。如果某个单例Bean持有可变状态,则可能引发并发冲突[^2]。 #### 5. FactoryBean与BeanFactory的区别 - **FactoryBean** 是一种特殊的Bean接口,允许自定义复杂的初始化过程。 - **BeanFactory** 则是用来获取Bean实例的基础工厂类,属于较底层的设计。 #### 6. Spring事务管理 Spring支持声明式事务管理和编程式事务管理两种形式。前者主要依靠@Transactional注解来简化事务边界设置工作流程;后者则是手动编写代码显式调用beginTransaction()、commit()方法等方式来进行更精细的操作。 #### 7. MyBatis的一对一映射配置 当涉及到实体间的关系时,比如一对一关联场景下,在Mapper XML文件里可通过`<association>`标签指定外键字段及相关联的目标表查询语句[^5]: ```xml <resultMap type="User"> <id property="userId" column="user_id"/> <association property="profile" javaType="Profile"> <id property="profileId" column="profile_id"/> </association> </resultMap> ``` #### 8. SSM整合的关键点 为了使这三个技术栈协同运作良好,通常需要做如下几件事情: - 配置数据源DataSource; - 设置SqlSessionFactoryBean并将之注册到Spring Context中去; - 使用MapperScannerConfigurer扫描包路径内的所有Mapper接口从而动态代理生成对应的Dao层实现类。 --- ### 示例代码片段展示 以下是有关如何利用Spring Boot Starter Data JPA替代传统MyBatis的部分示例: ```java // Entity Class Example @Entity public class User { @Id private Long id; private String name; public void setId(Long id){ this.id=id; } } // Repository Interface Definition @Repository public interface UserRepository extends CrudRepository<User,Long> {} ``` 上述例子展示了基于Java Persistence API (JPA)标准构建的数据访问层设计方案,相比原生MyBatis更加简洁高效。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值