简介
今天学习Spring的第一天,无非也就是入门基础知识。主要了解IOC和DI部分,要熟练掌握哦~
Spring简介
1. Spring介绍
Spring是一个非常活跃的开源框架;它是一个基于Core来构架多层JavaEE系统的框架,它的主要目地是简化企业开发.
Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring
2. Spring框架的优势
•方便解耦,简化开发
•Spring就是一个大工厂,可以将所有对象创建和依赖关系维护,交给Spring管理
AOP编程的支持
•Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能
声明式事务的支持
•只需要通过配置就可以完成对事务的管理,而无需手动编程
方便程序的测试
•Spring对Junit4支持,可以通过注解方便的测试Spring程序
方便集成各种优秀框架
•Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架(如:Struts、Hibernate、MyBatis、Quartz等)的直接支持
降低JavaEE API的使用难度
•Spring 对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低
3. Spring模块介绍
Spring 框架是一个分层架构,,它包含一系列的功能要素并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分
Spring开发准备
1. 准备Jar包 dist\spring.jar --spring的核心类库 在spring文档的dist下 lib\jakarta-commons\commons-logging.jar --引入的第三方类库 都spring文档的lib下 lib/aspectj/aspectjweaver.jar和aspectjrt.jar --如果使用了切面编程(AOP),还需要下列jar文件 lib/cglib/cglib-nodep-2.1_3.jar 如果使用了JSR-250中的注解,如@Resource/@PostConstruct/@PreDestroy,还需要下列jar文件 lib\j2ee\common-annotations.jar 2. Spring配置文件 默认情况下是applicationContext.xml 在beans.xml中引入约束的文件
beans.xml中不能显示对应的提示:此时xsd的文件没有被加载到myeclipse中.在beans包spring-beans-3.0xsd ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml");
Spring基本功能详解
1. 控制反转(IOC) Spring的控制反转:把对象的创建、初始化、销毁等工作交给spring容器来做。由spring容器控制对象的生命周期 获取IOC容器的对象 1). 启动spring容器 在类路径下寻找配置文件来实例化容器 ApplicationContext ctx = new ClassPathXmlApplicationContext(""); 2). 从spring容器中提取对象 ctx.getBeans("userService"); 2. Spring配置别名
3. 模拟spring底层:IOC和DI原理 * IOC(控制反转)是利用java的反射思想实现的 * DI(依赖注入)是利用java的内省机制实现 4. spring容器中bean节点id和name的区别 区别1: id指定唯一实例引用 name可以指定多个实例引用 区别2: id: 命名规范要满足xml对id属性命名规范 name: 如果bean的名称含有特殊字符,就需要使用name属性 备注:如果spring当前版本是3.0时候,id是有命名规范区别, 如果当前版本是3.2可以 通用 id和name不能出现重名 5. 加载spring容器的3种方式 方式1: 在类路径下寻找配置文件实例化容器 ClassPathXmlApplicationContext 可以一次性加载多个配置文件 方式2: 在文件系统下寻找配置文件 FileSystemXmlApplicationContext 方式3: BeanFactory ac = new XmlBeanFactory(new FileSystemResource("D:\\beans.xml")); ApplicationContext是对BeanFactory扩展,提供了更多功能 国际化处理 事件传递 Bean自动装配 各种不同应用层的Context实现
装配Bean
1. 三种实例化bean的方式 1). 使用接口和类,直接在spring容器中创建一个类,使用接口进行操作
2). 使用静态工厂方法实例化(简单工厂模式) 3). 使用实例工厂方法实例化(工厂方法模式) 2. bean 的作用域 在spring容器中存在scope的属性 1). singleton(单例:默认值) 表示创建UserServiceImpl对象,容器只创建一次 * lazy-init属性(只针对单例有效) 2). prototype (多例) 表示每次加载ac.getBean("userService");都会执行UserServiceImpl的构造方法,容器此时可以创建多个对象。 注意:用途:如果通过spring创建struts的Action实例的时候,就必须指定prototype类型,因为struts2是多实例多线程,否则struts2的值栈会出现问题 3). Request 在依次Http请求中,一个bean定义对应一个实例,该作用域在Spring ApplicationContext情形下有效 4). Session 在意一个HttpSession中,一个bean定义对应一个实例 5). Global session 3. 初始化bean时机 Spring默认在启动时将所有singletonbean提前进行实例化。提前实例化意味着作为初始化的一部分,ApplicationContext会自动创建并配置所有的singleton bean.通常情况下这是件好事。因为这样在配置中有任何错误能立即发现。 Lazy-init=”true or false” Lazy-init 为false,spring容器将在启动的时候报错(比较好的一种方式) Lazy-init 为true,spring容器将在调用该类的时候出错 4. init、destroy Spring初始化bean或销毁bean时,有时需要作一些处理工作,因此spring可以在创建和拆卸bean的时候调用bean的两个生命周期方法 5. 创建bean的生命周期 **1.instantiate bean对象实例化 2.populate properties 封装属性 3.如果Bean实现BeanNameAware 执行 setBeanName 4.如果Bean实现BeanFactoryAware 或者 ApplicationContextAware 设置工厂 setBeanFactory 或者上下文对象 setApplicationContext 5.如果存在类实现 BeanPostProcessor(后处理Bean) ,执行如果Bean实现InitializingBean 执行 afterPropertiesSet 接口 BeanPostProcessor 后处理Bean 提供两个钩子函数,用于开发者 动态去修改Bean对象 (动态代理) 6.如果bean实现InitializingBean,执行afterPropertiesSet()初始化 7.调用 指定初始化方法 userInitMethod 8.如果存在类实现 BeanPostProcessor(处理Bean) ,执行postProcessAfterInitialization **9.执行业务处理,即用户自定义的业务操作 10.如果Bean实现 DisposableBean 执行 destroy(适用单例) 11.调用 指定销毁方法 userDestroyMethod(适用单例)
依赖注入(DI)
1. 依赖注入(DI) 所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到另一个对象的组件中
2. 依赖注入(DI) 1). 通过setter方法注入依赖 元素的 子元素指明了使用它们的set方法来注入。可以注入任何东西,从基本类型到集合类,甚至是应用系统的bean a. 使用p命名空间 为了简化XML文件配置,Spring从2.5开始引入一个新的p名称空间 p:<属性名>="xxx" 引入常量值 p:<属性名>_ref="xxx" 引用其它Bean对象 b. 装配各种类型实现 List: 数组:
Set:
Map: