Spring 学习笔记 (一)
1. 使用版本 3.2.0的spring. 创建一个名称为TestSrping的普通web工程.
将spring的libs文件夹中的jar拷贝到WEB-INF/lib下,注意javadoc和sourc的不需要
2. spring 3的版本中去掉了依赖包,所以需要额外找到commons-logging-1.1.1.jar拷贝到WEB-INF/lib下
小试牛刀代码参考:test.spring包
3. Ioc控制反转,又叫依赖注入(Dependency Injection): 当某个Java实例(调用者)需要另一个Java实例(被调用者)
时,在传统的程序设计过程中,通常有调用者来创建被调用者的实例.而在依赖注入的模式下,创建被调用者的工作不再
由调用者来完成,因此称为控制反转;创建被调用者实例通常有SPring容器来完成,然后注入调用者,因此也称为依赖注入.
依赖注入有两种:
设值注入: Ioc容器使用属性的setter方法来注入被依赖的实例
构造注入: Ioc容器使用构造函器来注入被依赖的实例
区别: 设置注入时,Spring先调用Bean的无参构造器,创建实例,然后调用setter方法,
构造注入,Spring直接调用有参数的构造器
4. 设值注入:参考附件工程中的 test.ioc.setter包中代码
5. Sping 通过配置文件来配置依赖关系,参考工程中bean.xml
6. Spring 容器, 基本接口BeanFactory,子接口ApplicationContext
通常ApplicationContext的实现类:
FileSystemConfigApplicationContext,
ClassPathXmlApplicationContext,
AnnotationConfigApplicationContext
Web应用中:
XmlWebApplicationContext,
AnnotationConfigWebApplicationContext
7. 国际化
ApplicationContext接口 继承自MessageSource,
MessageSource接口有下面三个方法:
String getMessage(String code,Object[] args,Locale loc)
String getMessage(String code,Object[] args,Sring default,Locale loc)
String getMessage(MessageSourceResolvable resolvable,Locale loc)
当程序创建 ApplicationContext时,会自动在配置文件中查找messageBean的配置,
一旦找到,上述三个方法被委托给该messageBean,如果没有改Bean,ApplicationContext
查找其父配置中的messageBean,如果还没有找到,则系统会自动创建一个空的StaticMessageBean
的Bean,该Bean能接受上面三个方法的调用.
在Spring中通常使用ResourceBundlMessageSource这个类
8. ApplicationContext的事件机制
两个对象:
(1) ApplicationEvent:容器事件,可以是自定义的事件(一个类必须继承自ApplicationEvent)
(2) ApplicationListener:事件监听器,在Spring中配置了实现ApplicationListener接口的Bean
Spring容器就会把这个Bean当成容器事件的监听器.
当系统创建Spring,加载Spring容器是会自动触发容器事件,容器事件监听器可以监听容器事件,
也可以监听自定义事件.程序中可以通过调用ApplicationContext的publishEvent来触发事件.
内置事件:
(1) ContextRefreshedEvent:ApplicationContext容器初始化或者刷新时触发该事件。
(2) ContextStartedEvent:当使用ConfigurableApplicationContext接口的start()方法启动ApplicationContext容器时触发该事件。
(3) ContextClosedEvent:当使用ConfigurableApplicationContext接口的close()方法关闭ApplicationContext容器时触发该事件。
(4) ContextStopedEvent: 当使用ConfigurableApplicationContext接口的stop()方法停止ApplicationContext容器时触发该事件。
(5) RequestHandledEvent: Web相关事件,只能应用于是用DispatcherServlet的Web应用.当Spring处理用户请求结束后触发.
(包 test.springevent)
9. 在Spring的Bean中获得Spring容器(ApplicationContext的引用)
bean需要实现ApplicationContextAware 接口,该接口包含一个setApplicationContext方法,传入ApplicationContext参数.
这样容器在实例化bean时,会调用这个方法,并把容器本身作为参数传递给这个方法.
(包 test.bean.get.appcontext)
附件工程文件中,需要导入spring 3.2.0 版本的lib里面的jar包