Spring
1、Spring的理解
Spring解决了业务逻辑和各层之间的耦合问题(比如,IOC、IOP、事务管理),使得开发人员将更多的注意力集中业务逻辑上。
2、Spring IOC与IOP的理解
IOC:将创建对象交由Spring容器负责,由BeanFactory接口和依赖注入支持。
依赖注入就是给Bean对象的成员变量赋值。Bean就是组件对象。
IOP:面向切编程,使用代理增强方法,使得代码达到横向重用的效果。
3、BeanFactory如何加载Bean
在配置文件里面配置,在通过ApplicationContext加载
4、Bean实例化的方式
构造器实例化:<bean id = "instance", class = "instance.BeanClass"/>
工厂实例化
5、循环依赖怎么解决
改用setter方式
6、Bean对象的生命周期
简单来讲创建、初始化、使用、销毁、初始化和销毁都可以调用相应的方法。
7、依赖注入的几种方式
基于XML:构造器注入,setter方法。Bean对象太多会造成XML文件很长。
基于注解:@Component:表示一个组件对象,用在任何层次上
@Repository(仓库):用于Dao层
@Service:用业务逻辑层
@Controller:用于控制层
自动装配
@Autowired(自动装配):根据Bean的类型装配
@Resource:根据Bean的名称装配
@Qualifier:与@Autowired一起使用按照名称装配
8、动态代理与静态代理
静态代理AspectJ在编译期织入,性能略高。
动态代理JDK代理与CGLIB代理区别
- JDK代理要求Bean必须实现接口,CGLIB代理不要求Bean实现接口(可以强制使用)
- CGLIB对Bean的子类进行增强,所以不可以对final修饰的Bean进行代理
静态代理:若代理类在程序运行前就已经存在,那么这种代理方式被成为静态代理 ,这种情况下的代理类通常都是我们在 Java 代码中定义的, 静态代理中的代理类和委托类会实现同一接口;
动态代理:代理类在程序运行时创建的代理方式被称为动态代理。 也就是说,这种情况下,代理类并不是在 Java 代码中定义的,而是在运行时根据我们在 Java 代码中的 “指示” 动态生成的。
以上三种代理方式Spring全部支持。
9、Spring的事务管理
简化了传统的数据库事务管理流程,提高了开发效率。
机制:调用方法过程中抛出了未检查异常或者显示调用setRollBack方法,则事务回滚;
如果事务执行完成或者抛出被检查异常则提交。
事务分为基于接口的编程式和基于XML或注解的声明式,推荐使用声明式使得业务代码更加纯洁易维护。
10、Spring中用到的设计模式
- 工厂模式(BeanFactory)
- 单例模式(默认的Bean的作用范围)
- 代理模式(AOP)
- 观察者模式
- DAO模式
- MVC模式
11、配置文件
Spring的application.xml
- 开启事务管理
- 扫描包
- 配置数据源
- 配置代理
MyBatis的mybatis-config.xml主要配置sql的映射文件
SpringMVC的springmvc-servlet.xml主要配置ViewResolver(主要在控制器)
12、Spring的主要模块
DAO、Web、AOP、Core、Tset
13、Bean对象的作用范围
singleton:默认作用域单例,Spring容器中只有一个
prototype:每次使用getBean都会创建一个Bean对象
request:一次HTTP请求共享一个Bean对象
session:一次会话共享一个Bean对象
application:同一个应用共享一个Bean对象
webSocekt : 每个socket对象创建一个