什么是Spring
Spring是一个开源容器框架,它集成各类型的工具,通过核心的Bean factory实现了底层的类的实例化和生命周期的管理。在整个框架中,各类型的功能被抽象成一个个的 Bean,这样就可以实现各种功能的管理,包括动态加载和切面编程。
Spring的优点
1.能有效地阻止你的中间层对象
2.能消除许多工程中常见的对Spring的过多使用
3.能消除各种各样自定义格式的属性文件的需要,使配置信息一元化
4.能够帮助我们真正意义上实现针对接口编程
5.支持JDBC和O/R Mapping产品(Hibernate)
6.能使用AOP提供声明性事务管理,可以不直接操作JTA也能够对事务进行管理
AOP(切面编程)
AOP称为面向切面编程,是一种通过预编译方式和运行期间,动态代理实现程序功能的统一维护的技术
AOP基本概念
- 切面(Aspect):就是你要实现的交叉的非核心业务功能
- 连接点(JoinPoint):应用程序执行过程中插入切面的地点,可以是方法调用,异常抛出
- 通知(Advice):通知切面的实际实现代码
- 切入点(Pointcut):定义通知应用在哪个连接点
- 目标对象(Target):被通知对象
- 代理(Proxy):将通知应用到目标对象后创建的对象
- 织入(Weaving):将切面应用到目标对象从而创建一个新的代理对象
AOP通知类型
- 前置通知(Before):目标方法执行前调用
- 后通知(After):目标方法执行后调用
- 返回后通知:目标方法正确执行后调用
- 环绕通知(Around):目标方法执行前,执行后都需要调用
- 抛出异常通知(Throws):目标方法抛出异常时调用
IOC(控制反转)
控制反转模式的基本概念:不创建对象,但是描述创建它们的方式。在代码中不直接与对象和服务连接,但在配置文件中描述哪一个组件需要哪一项服务。容器(在Spring框架中是IOC容器)负责将这些联系在一起
IOC的三种实现类型
1、接口注入
public class ClassA {
private InterfaceB clzB;
public InterfaceB doSomething() {
Ojbect obj = Class.forName(
Config.BImplementation).newInstance();
clzB = (InterfaceB)obj;
return clzB;
}
}
2、设值注入
public class Sport {
private InterfaceBall ball;
public void setBall(InterfaceBall arg) {
ball = arg;
}
}
3、构造器注入
public class DIByConstructor {
private DataSource dataSource;
public DIByConstructor(DataSource ds) {
this.dataSource = ds;
}
……
}
spring的IOC容器
-
BeanFactory
从容器中取出的组件,为懒加载方式(延迟加载)
-
ApplicationContext
ApplicationContext是BeanFactory的子接口,从容器中取出的组件,为立即加载方式
提供配置类、注解等多种加载方式,实例化Spring容器中管理的组件,并协作对象间的关联关系
ApplicationContext的实现类
- ClassPathXmlApplicationContext: spring使用XML配置文件注册组件,XML文件必须放在类路径下
- FileSystemXmlApplicationContext:spring使用XML配置文件注册组件,可以指定相对路径和绝对路径,查找XML文件
- XmlWebApplicationContext:spring使用XML配置文件注册组件,根据WEB应用程序的部署路径查找XML文件
- AnnotationConfigApplicationContext:spring使用配置类和注解注册组件