1、spring作用是什么?
核心内容--DI 依赖注入
核心内容--AOP 面向切面编程
ssm整合开发 使用spring两大核心技术整合springmvc与mybatis
2、如何理解DI? IOC?
- DI:Dependency Injection 依赖注入
将组件的构建和使用分开。
如项目中Service实现类中需要Dao的对象,可以在service中声明dao接口类型,运行时由spring给service中的dao属性注入实现类对象。
- IOC:Inversion of Control 控制反转
将组件对象的控制权从代码本身转移到外部容器(spring)。
之前对象的创建、属性赋值在代码段完成,现在spring容器帮助管理对象,完成创建对象,给属性赋值。
一般开发中 dao、service的实现类对象由spring管理。
3、如何理解AOP
AOP:Aspect Oriented Programming面向切面编程
AOP的目标:
让我们可以“专心做事”
AOP原理:
将复杂的需求分解出不同方面,将散布在系统中的公共功能集中解决
采用代理机制组装起来运行,在不改变原程序的基础上对代码段进行增强处理,增加新的功能
4、aop增强类型分类
- 前置增强 类实现MethodBeforeAdvice接口
执行目标方法之前 植入
重写了public void before(方法对象Method m, 方法参数列表Object[] arg1,方法所在类的对象 Object arg2) throws Throwable {}
- 后置增强 类实现AfterReturningAdvice接口
后置增强处理,在目标方法正常执行(不出现异常)后织入增强处理
重写了public void afterReturning(返回值类型Object arg0, Method arg1, Object[] arg2, Object arg3) throws Throwable {}
- 最终增强 类实现AfterAdvice接口
最终增强处理,不论方法是否抛出异常,都会在目标方法最后织入增强处理
环绕增强 类实现MethodInterceptor接口
环绕增强处理,在目标方法的前后都可以织入增强处理
重写 public Object invoke(MethodInvocation arg0) throws Throwable {}
MethodInvocation的proceed(); 执行目标方法 注意接收返回值
proceed方法的返回值就是目标方法执行后的返回值
proceed()方法之前的处理相当于前置增强
proceed()方法之后的处理相当于后置增强
注意 invoke方法的返回值要设置为proceed方法的返回值
- 异常增强 实现ThrowsAdvice 接口
异常增强处理,在目标方法抛出异常后织入增强处理
void afterThrowing ( [Method method, Object[] arguments, Object target,] Throwable ex )
方法名必须是afterThrowing。
方法的入参只有最后一个是必须的,前三个入参是可选的,但是前三个参数要么都提供,要么一个也不提供。
5、applicationContext.xml配置文件中的
Bean节点 id、name 属性的区别
id(值唯一) name(值可以重复)
6、spring依赖注入的两种方式
setter方法注入
<bean name="sql" class="com.entity.Book">
<property name="属性名bid" value="2"></property>
<property name="bname" value="sql基础"></property>
</bean>
构造方法注入
<bean name="html" class="com.entity.Book">
<constructor-arg value="值 html基础" index="1"></constructor-arg>
<constructor-arg value="3" index="0"></constructor-arg>
</bean>
7、spring容器默认创建的对象默认是单例的
默认<bean scope="singleton"/>
如果想修改对象是多实例的 如何设置?
Scope = “prototype”
8、spring提供了哪些注解实现配置aop
@Aspect --增强类
@Before("植入点语法") 前置增强方法
@After 最终增强
@AfterReturning 后置增强
@AfterReturning(pointcut=" execution(public * com.pb.service.*.*(..))",returning="方法参数名returnVal")
@AfterThrowing 异常增强
@Around 环绕增强
9、ssm整合步骤及每个配置文件中配置的内容
ssm整合最终版本步骤:
- 导入jar包
- web.xml中配置
springmvc的前端控制器、过滤器
spring监听器、配置文件
- 三个框架的核心配置文件
spring-servlet.xml
MyBatis-Configuration.xml null值处理、实体类的别名
appliactionContext.xml
数据源、sqlSessionFactory(注入数据源、加载mybatis核心配置文件、加载实体类映射文件)、事务管理器(注入数据源)
启动事务注解配置(注入事务管理器)
service实现类的包名
启动dao省略实现类 配置dao接口和mapper文件所在的包
- 建包 实体类 dao接口
- 实体类映射文件
注意四个一致
service接口 service实现类
- @Service 业务类;@Transactional 事务处理
dao接口作为属性 @Autowired
控制器 service接口类型作为属性 使用@Autowired 自动装配属性
页面
10、都学过哪些框架?每个框架的特点是什么?
- SpringMvc:
- 是一个基于mvc设置模式的控制层框架
- 核心控制器(前端控制器)是一个Servlet类(DispatcherServlet)
- 控制器类单实例的(不要随便设置属性)
- 采用注解简化配置
- 请求参数、servlet api等数据 通过入参数的方式
- 支持拦截器
- Mybatis:
- 是一个实现数据持久化、基于orm映射的数据层框架
- 基于jdbc,对jdbc实现了封装
- 动态的sql(提供了很多的节点实现动态拼接sql语句)
- 自己定义sql语句,非常灵活
- 简单易学
- Spring:
- 核心内容--DI 依赖注入
- 核心内容--AOP 面向切面编程
- ssm整合开发 使用spring两大核心技术整合springmvc与mybatis
- Ssm:
使用注解配置
11、BeanFactory与ApplicationContext的区别
BeanFactory spring框架中最核心的一个API接口 初始化bean、管理bean的生命周期
ApplicationContext 是BeanFactory的子接口
具备BeanFactory接口的功能同时具备一些配置文件的支持、国际化等操作的支持。
12、@Resource与@Autowired的区别
@Autowired 属于Spring的注解
org.springframework.beans.factory.annotation.Autowired;
@Autowired 默认按类型装配
@Resource 不属于Spring的注解,JDK1.6支持的注解
javax.annotation.Resource;
@Resource 默认按名称进行装配,通过name属性进行指定
@Resource(name="userDao")
private UserDao userDao;