|
2017-09-04 00:02:02
Spring3开发实战-独家视频教程-视频教程学习笔记 浏览(7337)|评论(2) 交流分类:学习问题讨论|笔记分类: 课程笔记
IoC/DI的HelloWorld,理解HelloWorld的调用过程 视频教程学习笔记
视频课程地址:Spring3开发实战-独家视频教程 当前播放的视频地址:IoC/DI的HelloWorld,理解HelloWorld的调用过程 Bean对象的相关概念: 1.在Spring中,那些有IoC容器管理的对象就是Bean 2.容器:初始化,装配和负责组件的生命周期。 3.Bean的定义和Bean之间的依赖关系通过配置元数据来描述。 IoC容器:org.springframework.beans.factory. BeanFactory是Ioc容器的实际代表者,他负责Bean的实例化和装配 IoC/DI是Spring最核心的功能之一,Spring框架所提供的众多功能之所以能成为一个整体正是建立在IoC的基础之上。 BeanFactory和ApplicationContext: 1.org.springframework.beans及org.springfra mework.context包是Spring IoC容器的基础。 2.BeanFactory提供的高级配置机制,使得管理任何性质的对象成为可能。 3.ApplicationContext是BeanFactory的扩展,功能得到了进一步增强,比如更易与Spring AOP集成、消息资源处理(国际化处理)、事件传递及各种不同应用层的context实现(如针对web应用的WebApplicationContext)。 接口选择:选择ApplicationContext He'llWorld的基本调用过程: ①client->ApplicationContext->IoC/DI->applicationContext.xml ②根据client的要求创建bean实例->ApplicationContext得到了bean实例->将Bean实例传递到Client IoC/DI的配置使用,第一部分,依赖注入的实现 笔记 IoC容器的对象表达就是ApplicationContext,DataSource代表的是连接池 Spring IoC容器的实例化: 第一种: Resource resource = new FileSystemResource("beans.xml"); BeanFactory factory = new XmlBeanFactory(resource); 第二种: ClassPathResource resource = new ClassPathResource("bean.xml"); BeanFactory factory = new XmlBeanFactory(resource); 第三种: ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","applicationContext-extrapart.xml"}); BeanFactory factory = (BeanFactory)context; 在第三种方式中: 1.加载的ClassPath下的资源 2.加载new String[]中的多个资源文件时可能会造成名字重复的问题,此时会导致后面的文件中同名的bean覆盖前面文件中的同名的bean,所以建议: ①模块的公共部分起名为applicationContext .xml ②不同模块的xml起名为applicationContext-模块.xml ③模块中bean的名字前加上当前模块的名字作为前缀 强调一点:每读取一次配置文件,就会创建一个IoC容器的实例。没创建一个IoC容器的实例就会对应在Spring的缓存中创建一片与配置文件对应的一个内存空间。 所以,对于同一个配置文件应该只被读取一次!最好是一次读取配置文件,只创建一个applicationContext。 配置文件中常见的配置内容: bean的定义: 1.全限定类名:这通常是bean的实际实现类。如果通过static factory方法来实例化bean,而不是使用常规的构造器,那么类名实际上就是工厂类的类名。 2.bean行为的定义:即创建模式(是prototype还是singleton)、自动装配模式、依赖检查模式、初始化以及销毁方法。这些定义将决定bean在容器中的行为。 3.创建bean实例的构造器参数和属性值。比如,通过bean来定义连接池,可以通过属性或者构造参数指定连接数,以及连接池大小限制等。 4.bean之间的关系,即协作(或者称依赖) 命名Bean: Bean的命名: IoC/DI的配置使用,第一部分,依赖注入的实现 笔记 'IoC容器的对象表达就是ApplicationContext,DataSource代表的是连接池 Spring IoC容器的实例化: 第一种: Resource resource = new FileSystemResource("beans.xml"); BeanFactory factory = new XmlBeanFactory(resource); 第二种: ClassPathResource resource = new ClassPathResource("bean.xml"); BeanFactory factory = new XmlBeanFactory(resource); 第三种: ApplicationContext context = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml","applicationContext-extrapart.xml"}); BeanFactory factory = (BeanFactory)context; 在第三种方式中: 1.加载的ClassPath下的资源 2.加载new String[]中的多个资源文件时可能会造成名字重复的问题,此时会导致后面的文件中同名的bean覆盖前面文件中的同名的bean,所以建议: ①模块的公共部分起名为applicationContext .xml ②不同模块的xml起名为applicationContext-模块.xml ③模块中bean的名字前加上当前模块的名字作为前缀 强调一点:每读取一次配置文件,就会创建一个IoC容器的实例。没创建一个IoC容器的实例就会对应在Spring的缓存中创建一片与配置文件对应的一个内存空间。 所以,对于同一个配置文件应该只被读取一次!最好是一次读取配置文件,只创建一个applicationContext 读取多个配置文件 第一种方法: 为了加载多个XML文件生成一个ApplicationContext实例,可以将文件路径作为字符 串数组传给ApplicationContext构造器。而bean factory将通过调用bean defintion reader从多个文件中读取bean定义。通常情况下,Spring团队倾向于上述做法,因为这样 各个配置并不会查觉到它们与其他配置文件的组合。 第二种方法: 使用一个或多个的元素来从另外一个或多个文件加载bean定义。所有的 元素必须放在元素之前以完成bean定义的导入。 让我们看个例子: 配置文件中常见的配置内容: bean的定义: 1.全限定类名:这通常是bean的实际实现类。如果通过static factory方法来实例化bean,而不是使用常规的构造器,那么类名实际上就是工厂类的类名。 2.bean行为的定义:即创建模式(是prototype还是singleton)、自动装配模式、依赖检查模式、初始化以及销毁方法。这些定义将决定bean在容器中的行为。 3.创建bean实例的构造器参数和属性值。比如,通过bean来定义连接池,可以通过属性或者构造参数指定连接数,以及连接池大小限制等。 4.bean之间的关系,即协作(或者称依赖) 命名Bean: Bean的命名: Bean的命名 每个bean都有一个或多个id(或称之为标识符或名称,在术语上可以理解成 一回事),这些id在当前IoC容器中必须唯一。 当然也可以为每个bean定义一个name,但是并不是必须的,如果没有指 定,那么容器将为其生成一个惟一的name。对于不指定name属性的原因我们会在 后面介绍(比如内部bean就不需要)。 n Bean命名的约定 bean的命名采用标准的Java命名约定,即小写字母开头,首字母大写间隔 的命名方式。如accountManager、 accountService等等。 对bean采用统一的命名约定将会使配置更加简单易懂。而且在使用Spring AOP,这种简单的命名方式将会令你受益匪浅。 Bean的别名 一个Bean要提供多个名称,可以通过alias属性来加以指定 ,示例如下: 用构造器来实例化Bean ,前面的实例就是 使用静态工厂方法实例化 采用静态工厂方法创建bean时,除了需要指定class属性外,还需要通过 factory-method属性来指定创建bean实例的工厂方法,示例如下: class="examples.ExampleBean2" factory-method="createInstance"/> 实例化Bean-1 使用实例工厂方法实例化 使用此机制,class属性必须为空,而factory-bean属性必须指定为当前 (或其祖先)容器中包含工厂方法的bean的名称,而该工厂bean的工厂方法本身必 须通过factory-method属性来设定,并且这个方法不能是静态的,示例如下: 依赖注入(DI)基本的实现方式 DI主要有两种注入方式,即Setter注入和 构造器注入。 Setter方法示例: public class HelloImpl implements HelloApi{ private String name = ""; public void setName(String name){ this.name = name; } public String helloSpring3(int a){ System.out.println("hello Spring3==="+a+",name="+name); return "Ok,a="+a; } } 示例——配置文件 javass Spring3 构造器参数示例: 示例——Java类 public class HelloImpl implements HelloApi{ private String name = ""; public HelloImpl(String name){ this.name = name; } public String helloSpring3(int a){ System.out.println("hello Spring3==="+a+",name="+name); return "Ok,a="+a; } } 示例——配置文件 javass Spring3 构造器参数的解析 1.默认解析方式 构造器参数将根据类型来进行匹配。 2.构造器参数类型匹配 可以使用type属性来显式的指定参数所对应的简单类型。例如: 3.构造器参数的索引 使用index属性可以显式的指定构造器参数出现顺序。例如: 构造器参数的名称 在Spring3里面,可以使用构造器参数的名称来直接赋值。例如: 配置参数说明: idref元素 idref元素用来将容器内其它bean的id传给 或 元素,同时提供错误验证功能。idref元素和差不多,只是 传递一个字符串,用来方便xml检查。示例如下: 上述bean定义片段完全地等同于(在运行时)以下的片段 theTargetBean 第一种形式比第二种更可取的主要原因是,使用idref标记允许容器在部署 时 验证所被引用的bean是否存在。而第二种方式中,传给client bean的 targetName属性值并没有被验证。任何的输入错误仅在client bean实际实例化 时才会被发现(可能伴随着致命的错误)。如果client bean 是prototype类型 的bean,则此输入错误(及由此导致的异常)可能在容器部署很久以后才会被发 现。 如果被引用的bean在同一XML文件内,且bean名字就是bean id,那么可以 使用local属性,此属性允许XML解析器在解析XML文件时来对引用的bean进行验 证 ,示例如下: 引用其它的bean(协作者) ——ref元素 尽管都是对另外一个对象的引用,但是通过id/name指向另外一个对象却有 三种不同的形式,不同的形式将决定如何处理作用域及验证。 1:第一种形式也是最常见的形式是使用标记指定目标bean,示例: 2:第二种形式是使用ref的local属性指定目标bean,它可以利用XML解析器来验证 所引用的bean是否存在同一文件中。示例: 3:第三种方式是通过使用ref的parent属性来引用当前容器的父容器中的bean,并 不常用。示例: <-- 注意这里的名字和parent的名字是一样的--> class="org.springframework.aop.framework.ProxyFactoryBean"> 内部Bean 所谓的内部bean(inner bean)是指在一个bean的或 元素中使用元素定义的bean。内部bean定义不需要 有id或name属性,即使指定id 或 name属性值也将会被容器忽略。示例: ' 精品视频课程推荐
Java数据结构和算法精讲版
透彻理解JavaBean视频教程
研磨设计模式——跟着cc学设计系列视频教程
Ajax+JSON基础实战视频教程
高级软件架构师实战培训阶段一
评论(2)
请登录后评论 登录
|