学习视频课程,很详细的研究了下。包括以下内容:
spring简介,ioc和aop,java的反射,资源访问工具类,以及bean的一些知识点普及。
-
SPRING
-
使用基本Javabean代替EJB,解决企业开发的复杂性。优点:代码污染低,AOP提供通用任务的集中管理,DI降低了耦合度。
-
好处:可以有效组织中间对象,消除单例模式的坏处。使用统一的配置。促进良好的变成习惯,减少编程代价。易于单元测试。使EJB成为一种备选。为数据存取提供了一致的框架。
-
核心模块:spring core,spring上下文,AOP面向切面编程,事务管理服务;JDBC和DAO通用,ORM,WEB模块支持与strutcs的集成,MVC框架大量视图技术
-
SPRING IOC:
-
控制反转,由SPRING负责控制对象的生命周期和对象间的关系。
-
举个例子,跟传统模式的区别,以找女朋友为例,传统是每个对象自己去找,多高的,多瘦的,然后对象的生成和销毁都有自己来做。而SPRING类似于婚介公司,我们只要把自己的特征,以及需要的女朋友的特征告诉SPRING,他就会帮我们找好对应的女朋友,同时新的对象的生命周期都不由我们控制,我们也会被别人调用。
-
IOC理论背景:对象之间的耦合类似齿轮组的关系,互相依赖,牵一发而动全身。IOC是一个第三方,齿轮之间的依赖关系通过IOC来实现,由IOC去控制,相当于一个粘合剂。当A需要B的时候,new B(),有了IOC后,IOC去创建B,注入到A中,返过来了所以叫控制反转,控制权颠倒了。
-
依赖注入:和控制反转是一回事,只不过角度不同。传统A依赖B,现在A被IOC注入。就是引入IOC,通过依赖注入的方式,实现对象间的解耦。用电脑主机和USB设备做例子,传统用光盘,耦合程度太高,人相当于IOC,电脑需要USB设备的时候,把USB插到电脑。
-
IOC的好处:
-
降低耦合性,提高了可维护性,各个CLASS互不影响测试。
-
提高开发效率和产品质量:电脑和USB厂商互不影响,只要遵守规范就行了。开发团队之间可以不用太多的交互。
-
统一标准,提高模块的可复用性。
-
模块具有热插拔性。
-
Spring aop
-
Aop 是oop的延续。常常用来事务处理、安全检查、缓存、对象池管理等。
-
编程的三部曲:1,定义普通业务组件、定义切入点、定义增强处理
-
关键概念:切面(日志处理)、连接点(一般是某段代码,或者方法)、切入点(链接切面和连接点)、引入,目标对象、aop代理(aop创建的这个框架对象)、织入(切面和对象)
-
开发包:Spring core基础核心、Spring beans配置文件,依赖注入,创建bean、Spring aop,声明事务管理,应用日志、Spring context 最重要的。还有一些其他的:aspects、context support、expression、framework、instrument、jdbc、jms等等。
-
案例:两个bean配置相互依赖关系,就可以使用的时候,调用b的方法。
-
ioc概念:控制+反转。注入分为三种:构造函数注入、属性注入、接口注入。传统方法:导演注入刘建明的扮演者,使用属性注入比较方便,构造函数注入不太方便。ioc的注入方式:通过配置文件ref扮演者即可。
-
java的反射技术
-
通过程序化方式间接对class文件进行调用。
-
传统方式用构造函数或者set设置属性。
-
一,通过类装载器class loader(是一个运行组件,负责查找和装入class字节码文件)获取car对象,二,再获取构造器对象,用构造器件实例化对象constructor(第一个反射类),类似于new car(),三,通过反射方法设置属性,class.getmethod….invoke(第二个反射类)filed(第三个反射类)。
-
反射可以访问class类的所有属性和方法,但是访问private和protected的时候,需要取消Java的检查
-
beanfactory这个工厂类就是使用反射机制实现ioc
-
资源访问工具类
-
Spring的一个rescource接口,为应用提供了强大的访问底层资源能力。具体实现类:bytearrayresource,二进制、文件资源,流、类、访问用rl访问的资源
-
上面的方法得用具体的方法,太麻烦了,也可以用资源类型地址前缀:classpath,ftp,http,file.
-
Ant的匹配符,?一个字符,**等
-
beanfactory和applicationcontext
-
前者是面向Spring本身,后者是面向开发者的
-
Bean factory
-
XmlBeanFactory,ConfigureBeanFactory等等
-
applicatiionContext由前者派生而来,提供了更多面向实际应用的功能。主要类
-
ClassPathXmlApplicationContext默认从类中加载,还有个file的,从文件加载配置文件
-
初始化加载就会实例化bean,而前者不会实例化,所以时间短
-
bean的生命周期
-
bf的生命周期。。。调用一堆方法初始化,实例化,销毁等等
-
Spring的配置文件浅析
-
命名空间引入Spring的各个不同的路径,表示不同的作用,一般用Spring官方的路径
-
bean的命名:首先唯一,getbean可以用类名,ID,name,或者ID+name(可以用这个Id或者这个name都可以获取到bean),或者多个name(通过其中任何一个别名都可以),指定别名alias,他的name是另外一个已经存在的bean的name.
-
id和name的区别:如果配置里一个bean引用里另外一个bean,如果是id的方式引用了一个不存在的bean,那么就会直接报错。但是name的方式,只有在程序实例化运行的时候才能发现。
-
Spring ioc中bean的实例化
-
构造器实例化bean:空构造器或者有参数contractor-arg index=0 value=6
-
不同构造器是不同的bean,然后区别有参数的多一个上面的配置
-
不同构造器实例化的方式是一样的,只不过bean不同而已
-
使用静态工厂方式实例化,是有参数的构造器
-
同样是getbean,
-
实例工厂:
-
factory-bean指定工厂bean,factory-method指定实例化的方法,方式和构造器是一样的,可以无参数,有参数
-
这种方式有两个bean,一个实例工厂bean,一个是使用实例工厂bean创建的bean,通过上面两个配置链接到第一个bean
-
最终个getbean是get到第二个bean即可,调用跟其他都一样
-
Spring bean的作用域
-
Singleton单例,是一个默认的,并且只会实例化一次,只有一个。大部分的都是这个。Spring启动时Spring applicationcontext容器会把所有的这个bean实例化放在缓存中,提前发现问题,加快运行速度。如果多个bean依赖同一个单例bean,那么是同一个bean
-
prototype:每次getbean都是一个new bean(),与1不同
-
request,仅在http request作用域
-
session,仅在http session中作用域
-
global session:全局生命周期
-
自定义作用域:自定义实现scope类,一般不要覆盖singleton和prototype的;注册自定义scope类,最后再使用
-
多个配置文件组合:多个xml,创建一个单独整合的配置文件import这多个,整合后只要加载这一个就行了