为什么选择使用Spring框架?
- 使用它的IOC功能,在解耦上达到了顶级的配置.
- 使用它对数据库访问事务相关的封装.
- 各种其他组件与Spring的融合,在 Spring中更加方便的快捷的继承其他的一些组件.
Spring是如何管理事务的?
Spring的事务声明有两种方式,编程式和声明式.Spring主要是通过"声明式事务"的方式对事务进行管理,即在配置文件中进行声明,通过AOP将事务切面切入程序,最大的好处就是大大减少了代码量.
(就是在配置文件中添加一个transaction配置文件,里边声明事务管理器,再配置声明事务标识,直接在类上加注解就可以了)
Spring IOC容器配置Bean的方式?
1.基于XML文件进行配置(
- 通过全限定类名,
- 静态方法,
package com.itheima.spring.factory;
import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;
public class StaticFactory {
public static AccountService createAccountService() {
return new AccountServiceImpl();
}
}
- 动态实例化方法,
package com.itheima.spring.factory;
import com.itheima.spring.service.AccountService;
import com.itheima.spring.service.AccountServiceImpl;
public class InstanceFactory {
public AccountService createAccountService() {
return new AccountServiceImpl();
}
}
).
2.w基于注解进行配置(注解扫描).
Spring的依赖注入(DI).
Set注入:
构造函数注入:
复杂对象注入list,set,map,props:
<property name="myStrs">
<set>
<value>mySet1</value>
<value>mySet2</value>
<value>mySet3</value>
</set>
</property>
<property name="myList">
<array>
<value>myStr1</value>
<value>myStr2</value>
<value>myStr3</value>
</array>
</property>
<property name="mySet">
<list>
<value>myList1</value>
<value>myList2</value>
<value>myList3</value>
</list>
</property>
<property name="myMap">
<props>
<prop key="myProp1">propvalue1</prop>
<prop key="myProp2">propvalue2</prop>
<prop key="myProp3">propvalue3</prop>
</props>
</property>
<property name="myProps">
<map>
<entry key="map1" value="mapvalue1"></entry>
<entry key="map2" value="mapvalue2"></entry>
<entry key="map3" value="mapvalue3"></entry>
</map>
</property>
Bean是如何被管理的?
在Spring框架中一旦把一个bean纳入到SpringIOC容器中,这bean的声明周期就交由容器进行管理.
概括来说主要有四个阶段:实例化,初始化,使用,销毁.
解释一下什么叫AOP(面向切面编程)?
AOP指一种程序设计范型,以切面的语言构造为基础,切面是一种新的模块化机制,用来描述分散在对象类或者方法中的横切关注点.通常,事务、日志、安全性等关注就是应用中的横切关注功能.
如何理解AOP中的概念?
Joinpoint(连接点):程序执行的某个特定位置(程序中所有方法的方法前,方法后,异常等时机都是连接点)。每个方法有多个连接 点
Pointcut(切入点):定位你感兴趣的方法。
Advice(通知/增强):增强逻辑代码.横切逻辑执行的方位信息
切面 = 切点 + 增强.
Spring关于JDK/CGLIB动态代理的选择.
Spring发现涉及带接口的就是用JDK动态代理,如果不涉及接口就使用CGLIB动态代理.
Spring的常用注解:
@Component,@Controller,@Service,@Repository
Springmvc的工作流程
用户发送请求给前端控制器,前端控制器请求查询Handler到处理器映射器,处理接映射器返回处理器执行链给前端控制器,前端控制器请求处理器适配器,处理器适配器请求handler,处理完返回数据到前端控制器,经过视图解析器渲染返回view对象给前端控制器,再经过视图渲染响应给用户.
你怎样定义类的作用域?
当定义一个bean在Spring里,我们还能给这个bean生命一个作用域.它可以通过bean定义中的scope属性来定义.
如,当spring要在需要的时候每次生产一个新的bean实例,bean的scope属性就被指定为prototype.
另一方面,一个bean每次使用的时候必须返回同一个实例,这个bean的scope属性必须设为singleton.
request:每次http请求都会创建一个bean
session:在一个HTTP Session中,一个bean定义对应的一个实例,
缺省的Spring bean 的作用域是Singleton.
Spring框架中的单例bean是线程安全的吗?
Spring框架中的单例bean不是线程安全的.
你可以在Spring这种注入一个null和一个空字符串吗?
可以.