Spring4.0学习笔记 第一章

来源:互联网 发布:linux user nobody 编辑:程序博客网 时间:2024/05/16 05:25

Spring 核心 是 IOC (DI)和 AOP,也就是控制反转(将生成bean的责任交给spring容器),DI依赖注入(web应用中一般都是由各个组件相互依赖协作才能完成一定


的功能,spring面向接口注入依赖的组件,一定程度解耦了代码,因为我们不用关心实现接口实现,只要注入接口,不同的人不同的接口实现spring并不关心),创建组件之间


的协作行为通常称为装配。 spring有多种装配bean的方式,一种是按照xml方式装配,另一种是按照Java来描述配置(也就是建一个javaconfig将配置像正常javal类一样配置在


里面)。

Spring容器有两种容器实现。一种是bean工厂,一种是应用上下文,一般使用应用上下文,bean工厂对大多数应用都太低级了


 Spring上下午全权负责 对象的创建 和组装。 spring 自带了多种上下文的实现,它们唯一的区别就是加载配置文件的方式不同

例如:

         AnnotationConfigApplicationContext, 从一个或者多个基于Java的配置类中加载Spring应用上下文,也就是所有的配置在JavaConfig 类的这种形式 ;


AnnotationConfigWebApplicationContext, 从一个或者多个基于Java的配置类中加载Spring Web应用上下文;


ClassPathXmlApplicationContext 从类路径下 的一个或多个XML配置文件加载上下文的定义,把应用上下文的定义文件如beans标签中的所有bean 作为资源类;


FileSystemXmlApplicationContext 把文件系统下的一个或者多个xml配置文件中加载上下文的定义;XmlWebApplicationContext 从web应用下的一个或者多个xml配置文件加载上下文定义


例如手动加载上下文的例子:AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);

 Student student  = ac.getBean("beanId");  其它形式的上下文创建跟这类似


AOP面向切面编程,允许我们把系统各处的功能分离出来形成可重用的组件,例如 日志,事务管理,安全这样的功能,很多模块可能都会用到,我们可以把他们抽离出来作为一个切面公用,不仅减少了代码量而且降低了耦合

bean的生命周期

1、Spring对bean进行实例化

2、将值和bean的引用注入到bean对应的属性中

3、如果bean实现了BeanNameAware接口,Spring将bean的ID传递给setBeanName()方法

4、如果bean实现了BeanFactoryAware接口,Spring将调用setBeanFactory()方法,将BeanFactory容器实例传入;

5、如果Bean实现了ApplicationContextAware接口,Spring将调用setApplicationContext()方法,将bean所在的应用上下文传入进来

6、如果bean实现了BeanPostProcessor接口,Spring将调用他们的post-ProcessBeforeInitialization()方法

7、如果bean实现了InitializingBean接口,Spring将调用他们的After-PropertiesSet()方法,如果bean使用了init-method声明初始化方法,该方法也会被调用

8、如果bean实现了BeanPostProcessor接口,Spring将调用他们的post-ProcessAfterInitialization()方法

9、此时bean已经准备就绪,可以被应用程序使用了,他们将一直驻留在应用的上下文中,直到应用上下文被销毁

10、如果bean实现了DisposableBean接口,spring将调用它的destroy()接口方法。同样,如果bean使用了destroy-method声明销毁方法,该

 方法也会被调用


0 0
原创粉丝点击