Spring学习第一话-基础知识

Spring

Spring

Spring是于2003年兴起的一个轻量级的Java开发框架,是一个开源框架,
Spring的核心是控制反转(IoC)和面向切面(AOP)。

Spring

Spring的优点:
(1)方便解耦,简化开发
Spring就是一个大工厂,可以将所有对象创建和依赖的关系维护,交给Spring管理。
(2)AOP编程的支持
Spring提供面向切面编程,可以方便的实现对程序进行权限拦截、运行监控等功能。
(3)声明式事务的支持
只需要通过配置就可以完成对事务的管理,而无需手动编程。
(4)方便程序的测试
Spring对Junit4支持,可以通过注解方便的测试Spring程序。
(5)方便集成各种优秀框架
Spring不排斥各种优秀的开源框架,其内部提供了对各种优秀框架的直接支持(如:Struts、Hibernate、MyBatis等)。
(6)降低JavaEE API的使用难度
Spring对JavaEE开发中非常难用的一些API(JDBC、JavaMail、远程调用等),都提供了封装,使这些API应用难度大大降低。

1. 研究Spring 框架的构成

 IOC:控制反转的容器,是构成框架的基础
 DAO:(Data Access Object)数据访问对象 是Spring框架对JDBC的封装
 webMVC:是Spring对MVC设计模式和jsp Servlet 以及ajax的封装
 AOP:面向切面编程
 ORM:(Object Relation Mapping 对象关系映射)以面向对象的思想访问数据库
 JEE:邮件 消息服务 远程调用

2. 研究Spring 容器

Spring容器是什么?

Spring容器到底是什么?

Spring容器是Spring的核心,一切Spring bean都存储在Spring容器内,并由其通过IoC技术管理。Spring容器也就是一个bean工厂(BeanFactory)。应用中bean的实例化,获取,销毁等都是由这个bean工厂管理的。

从概念上讲:Spring 容器是 Spring 框架的核心,是用来管理对象的。容器将创建对象,把它们连接在一起,配置它们,并管理他们的整个生命周期从创建到销毁。

从具象化讲:通过概念的描述有些同学还是一脸懵逼,在我们的项目中哪个东西是Spring容器?在java项目中,我们使用实现了org.springframework.context.ApplicationContext接口的实现类。在web项目中,我们使用spring.xml——Spring的配置文件。

从代码上讲:一个Spring容器就是某个实现了ApplicationContext接口的类的实例。也就是说,从代码层面,Spring容器其实就是一个ApplicationContext(一个实例化对象)。

»在Spring中,任何的Java类都被当成Bean组件,通过容器管理和使用。
»Spring容器实现了IOC和AOP机制 
»Spring容器有ApplicationContext和BeanFactory两种类型
ApplicationContext的常用实现类:
	ClassPathXmlApplicationContext:它可以加载类路径下的配置文件,要求配置文件必须在类路径下。
	FileSystemXmlApplicationContext:它可以加载磁盘任意路径下的配置文件
	AnnotationConfigApplicatiionContext:它是用于读取注解创建容器的,

ApplicationContext和BeanFactory两种类型区别

BeanFacotry是spring中比较原始的Factory。如XMLBeanFactory就是一种典型的BeanFactory。原始的BeanFactory无法支持spring的许多插件,如AOP功能、Web应用等。
ApplicationContext接口,它由BeanFactory接口派生而来,因而提供BeanFactory所有的功能。ApplicationContext以一种更向面向框架的方式工作以及对上下文进行分层和实现继承,ApplicationContext包还提供了以下的功能:
• MessageSource, 提供国际化的消息访问
• 资源访问,如URL和文件
• 事件传播
• 载入多个(有继承关系)上下文 ,使得每一个上下文都专注于一个特定的层次
1.MessageSource, 提供国际化的消息访问
由于ApplicationContext扩展了MessageResource接口,因而具有消息处理的能力
2.事件机制:
ApplicationContext的事件机制主要通过ApplicationEvent和ApplicationListener这两个接口来提供的
Spring提供了部分内置事件:
ContextRefreshedEvent :ApplicationContext发送该事件时,表示该容器中所有的Bean都已经被装载完成,此ApplicationContext已就绪可用
ContextStartedEvent:生命周期 beans的启动信号
ContextStoppedEvent: 生命周期 beans的停止信号
ContextClosedEvent:ApplicationContext关闭事件,则context不能刷新和重启,从而所有的singleton bean全部销毁(因为singleton bean是存在容器缓存中的)
3.资源的访问
ApplicationContext扩展了ResourceLoader(资源加载器)接口,从而可以用来加载多个Resource,而BeanFactory是没有扩展ResourceLoader\\
1.通过虚拟路径来存取。当资源位于CLASSPATH路径下时,可以采用这种方式来存取。
Resource resource = acxt.getResource("classpath:messages_en_CN.properties"); 
2.通过绝对路径存取资源文件。
Resource resource = acxt.getResource("file:F:/testwork/MySpring/src/messages_en_CN.properties");
3.相对路径读取资源文件。
Resource resource = acxt.getResource("/messages_en_CN.properties");
\\

4.对Web应用的支持
与BeanFactory通常以编程的方式被创建不同的是,ApplicationContext能以声明的方式创建,如使用ContextLoader。当然你也可以使用ApplicationContext的实现之一来以编程的方式创建ApplicationContext实例 
5.Bean的注入时间
BeanFactroy采用的是延迟加载形式来注入Bean的,即只有在使用到某个Bean时(调用getBean()),才对该Bean进行加载实例化,这样,我们就不能发现一些存在的Spring的配置问题。而ApplicationContext则相反,它是在容器启动时,一次性创建了所有的Bean。这样,在容器启动时,我们就可以发现Spring中存在的配置错误

BeanFactory和ApplicationContext都支持BeanPostProcessor、BeanFactoryPostProcessor的使用,但两者之间的区别是:BeanFactory需要手动注册,而ApplicationContext则是自动注册

Spring 容器中对应的作用域

Spring 容器中对应的作用域
   Spring 容器中把对象的单例 和 非单例模式 看成不同的作用域,Spring 容器中一个对象
   的作用域默认是单例的 可以通过 bean 标记的 scope属性 来改变对象的作用域   比如 
   scope="singleton" 代表单例   scope="prototype" 代表非单例。其它的如 request
    session 等只在web部分才会涉及。
    
    
»指定Spring容器创建Bean对象的作用域 
作用域                                描述
singleton 在每个Spring IoC容器中一个bean定义对应一个对象实例, 默认项 
prototype 一个bean定义对应多个对象实例
request 在一次HTTP请求中,一个bean定义对应一个实例,仅限于 Web环境 
session 在一个HTTP Session中,一个bean定义对应一个实例,仅 限于Web环境 
global Session 在一个全局的HTTP Session中,一个bean定义对应一个实 例;仅在基于portlet的Web应用中才有意义,Portlet规范定 义了全局Session的概念

spring容器的生命周期

Spring 对象的初始化和销毁 

Spring可以管理singleton作用域Bean的生命周期,Spring可以精确地知道singleton域bean何时被创建,何时初始化完成,以及容器何时准备销毁Bean实例。

  1 初始化
   当spring 容器对象创建完成后,可以通过beans标记中的  default-init-method 
  来指定初始化方法。这样的影响的范围是整个容器中的对象,当对象对应的类型中
  没有对应的初始化方法 程序是不会报错的。
  也可以通过bean 标记的 init-method属性 指定对应的初始化方法   这种方式只影响到一个对象  如果这个对象中对应的类型没有对应的初始化方法程序会报错。
 2 销毁 
  当spring 容器对象即将消亡时,可以通过beans标记中的  default-destroy-method 来指定销毁方法。这样的影响的范围是整个容器中的对象,当对象对应的类型中没有对应的销毁方法 程序是不会报错的。
  也可以通过bean 标记的 destroy-method属性 指定对应的销毁方法   这种方式只影响到一个对象  如果这个对象中对应的类型 没有对应的销毁方法程序会报错。
 
 注意: 销毁规则必须用在单例模式的对象上 
      必须主动关闭容器
      
对于prototype作用域的Bean,Spring容器只负责Bean的创建,当容器创建实例完成后,Bean将完全交给客户端代码管理,容器不再负责其生命周期,Spring容器本身也不知道自己创建了多少个实例,更无从知道这些实例什么时候才会被销毁。


Spring 容器中对象的延迟实例化  (单例对象)
  一个单例模式的对象   默认在容器启动时创建   可以通过bean标记的  
  lazy-init="true"  让其在使用的时候再去创建 叫对象的延迟实例化。

Bean标签属性

Bean标签属性  

  ① id属性:Bean的名称在IOC容器中必须是唯一的。
  ② class属性:指定Bean对应实现类的全类名,即包名加类名,必须有无参构造。
  ③ scope属性: 前面提到过的作用域属性,不指定默认为singleton,即单实例模式。
  ④ name属性:设置<bean>标签的别名,多个别名之间用逗号或空格分开。
  ⑤  parent属性:子类Bean定义它所引用它的父类Bean。子类Bean定义它所引用它的父类Bean。这时前面的class属性失效。子类Bean会继承父类Bean的所有属性,子类Bean也可以覆盖父类Bean的属性。注意:子类Bean和父类Bean是同一个Java类。
  ⑥ abstract属性:用来定义Bean是否为抽象Bean。它表示这个Bean将不会被实例化,一般用于父类Bean,因为父类Bean主要是供子类Bean继承使用。
  ⑦ singleton属性:作用同③,默认为true
  ⑧ lazy-init属性:用来定义这个Bean是否实现懒初始化。如果为“true”,它将在BeanFactory启动时初始化所有的SingletonBean。反之,如果为“false”,它只在Bean请求时才开始创建SingletonBean。
  ⑨  autowire属性:它定义了Bean的自动装载方式。“no”:不使用自动装配功能。“byName”:通过Bean的属性名实现自动装配。“byType”:通过Bean的类型实现自动装配。“constructor”:类似于byType,但它是用于构造函数的参数的自动组装。“autodetect”:通过Bean类的反省机制(introspection)决定是使用“constructor”
  ⑩  dependency-check属性:它用来确保Bean组件通过JavaBean描述的所以依赖关系都得到满足。在与自动装配功能一起使用时,它特别有用。none:不进行依赖检查objects:只做对象间依赖的检查。simple:只做原始类型和String类型依赖的检查。all:对所有类型的依赖进行检查。它包括了前面的objects和simple。
  ⑪ depends-on属性:这个Bean在初始化时依赖的对象,这个对象会在这个Bean初始化之前创建。
  ⑫ init-method属性:用来定义Bean的初始化方法,它会在Bean组装之后调用。它必须是一个无参数的方法。
  ⑬ destroy-method属性:用来定义Bean的销毁方法,它在BeanFactory关闭时调用。同样,它也必须是一个无参数的方法。它只能应用于singletonBean。
  ⑭ factory-method属性:定义创建该Bean对象的工厂方法。它用于下面的“factory-bean”,表示这个Bean是通过工厂方法创建。此时,“class”属性失效。
  ⑮ factory-bean属性:定义创建该Bean对象的工厂类。如果使用了“factory-bean”则“class”属性失效。

3. 研究什么是IOC

IOC : Inversion Of Control  反转的控制 控制反转
程序中需要的某个组件的时候,由原来的new的方式,变成由Spring容器来进行组件的创建、管理和维护组件的关系。
好处是:可以大大的降低组件之间的耦合度,便于程序的维护和扩展。

Spring 容器实现IOC的步骤

Spring 容器实现IOC的步骤 
 4.1 建立一个项目  导入jar包(ioc)  拷贝spring配置文件到src 下
 4.2 在Spring 容器中配置 对象创建的说明 
           对象类型   引用名   =   new   对象类型();
     <bean  id="对象引用名"   class="包名.类名"></bean>
 4.3 创建Spring 容器  从 容器中获取对应的对象 
 
 
 

4. 研究Spring 容器创建对象的三种方式 和 如何配置

1.构造器方式实例化
默认调用类型对应的无参构造
<bean id="引用名" class="包名.类名" />

2.静态工厂方法实例化
调用类型对应的一个静态方法 来获取对象
<bean id="引用名" class="包名.工厂类名" factory-method="工厂静态方法名" /> 

3.实例工厂方法实例化
使用一个已经存在的对象 创建出了另一个对象
<bean id="引用名" factory-bean="工厂对象的id" factory-method="实例方法的名字" />

什么是ioc,作用,实现IOC的容器,spring容器实现哪些机制,IOC的使用方式,

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值