Spring IoC学习笔记

前几天抽空重温了Spring参考手册,IoC部分做了笔记,AOP部分因为结合了AspectJ和XML Schemed Support,暂时没做笔记,除此之外,还看了看Spring的事务管理以及对Hibernate的底层支持.现在整理出我的Spring IoC学习笔记.

 

1 学习Spring的切入点----反向控制,学习反向控制,Spring IoC容器的包开始.

org.springframework.beansorg.springframeword.context包是Spring IoC容器的基础.BeanFactory提供了配置框架及基本功能,ApplicationContext则增加了更多支持企业核心内容的功能.

2 了解bean

简单地讲,bean就是由Spring容器初始化、装配及被管理地对象,除此之外,bean就没有特别之处了.<o:p></o:p>

3 了解BeanFactory<o:p></o:p>

Spring,BeanFactoryIoC容器的核心接口.它的职责包括:实例化、定位、配置应用程序中的对象及建立这些对象间的依赖.<o:p></o:p>

实际运行机制是这样的:<o:p></o:p>

ApplicationContext context=new ClassPathXmlApplicationContext(new String[]{“applicationContext.xml”,”applicationContext-part2.xml”});<o:p></o:p>

BeanFactory factory=(BeanFactory)context;<o:p></o:p>

<o:p> </o:p>

我们需要BeanFactory实例,BeanFactory实例中最主要的一组方法就是getBean的重载方法.<o:p></o:p>

<o:p> </o:p>

4 <bean></bean>标签<o:p></o:p>

Class:采用标准java命名机制.<o:p></o:p>

Alias:别名.<o:p></o:p>

构造器参数:<constructor-arg index="”0”" value="”40”" type="”java.lang.Integer”"></constructor-arg><o:p></o:p>

4.1 bean的实例化:<o:p></o:p>

两种方法:<o:p></o:p>

第一种是直接调用构造函数.<o:p></o:p>

<bean class="”src.Example”/" name="”example”"></bean><o:p></o:p>

第二种是静态工厂的工厂方法,其中,工厂方法必须是静态方法.<o:p></o:p>

<bean class="”src.ExampleFactory”" style="BACKGROUND: yellow; mso-highlight: yellow" name="”example”"></bean>factory-method=”createExample”/><o:p></o:p>

第三种是动态(实例)工厂的工厂方法<o:p></o:p>

<bean name="”myFactory”/"></bean>

<bean name="”example”" factory-method="”createExample”/" factory-bean="”myFactory”"></bean>

这种方法的好处是工厂也被IoC.

4.2 反向注入的类型

1 setter()方法 2 构造器

使用构造器注入可能会导致循环依赖,A在构造器中注入B,B在构造器中注入A,此时,会抛出BeanCurrentlyInCreationException异常.对于此问题,一个可能的解决方法就是修改源代码,将构造器注入改为setter注入.另一个解决方法就是完全放弃使用构造器注入,只使用setter注入.

4.3 注入的时机

注入默认采用singleton模式,在容器创建时便创建,这样的好处是可以及时发现配置问题,坏处是增加了不必要的内存和时间开销.

4.4 ref的三种用法

<ref bean="”beanname”"></ref>

<ref local="”beanname”"></ref>

<ref parent="”beanname”"></ref>不常见

其中beanname可以是id也可以是name,为了优化,还可以把ref改成idref,这时会在创建容器时对beanname进行检验.

4.5 内部类的配置

4.6 集合的配置 <list></list> <props></props>

4.7 父子bean的集合属性合并(merge=true)

4.8 强类型集合(tiger适用)

SpringIoC支持tiger的强类型集合

4.9 null””的注入(<null></null><value></value><value></value>)

4.10 valueref的简写形式,包括在map

4.11 组合属性赋值

需要注意,组合中的任一级在初始化后不能为空,否则抛NullPointerException

4.12 depends-on

显示指定多个依赖,被指定的bean需要在该bean之前初始化,但并不一定该类与被指定的bean存在关联.

4.13 延迟初始化 <bean laze-init="”true”/"></bean>or <beans default-laze-init="”true”"></beans>…<beans></beans>

如果一个非延迟初始化bean依赖于一个延迟初始化bean,那么初始化前者的时候,会顺带初始化后者,也就是说,laze-init=”true”会实效.

4.14 自动装配 五种形式no byName byType constructor autodetect

优点:1 省事

     2 同步更新

缺点:确定你用的对,否则可能抛异常.

4.15

形式:方法注入

手段:<lookup-method name="”methodName”" bean="”&lt;/span"></lookup-method>返回类型的bean定义”>

目的:一个singleton类的某个方法每次调用需要创建不同的非singleton类实例.

注意:singleton类实例必须是prototype.

<o:p> </o:p>

5 bean的作用域

五种:singleton,prototype,request,session,global session,其中后三种是针对web.

如果采用后三种,只需要在web.xml中加入:

<listener></listener>

  <listener-class></listener-class> org.springframework.web.context.request.RequestContextListener

<o:p> </o:p>

如果需要将后三种作用域的bean注入到其它bean,还需要加入

<aop:scoped-proxy></aop:scoped-proxy>

之所以加入这条语句的原因,就是将这个bean配成动态代理模式,这样可以保证每次注入进依赖类中的对象不总是那一个,配上这个代理后,被注入类就就智能了了.

<o:p> </o:p>

6 定制bean特性

6.1 Lifecycle接口

包括两个接口,InitializingBeanDisposableBean,实现这两个接口可的bean在初始化和析构时会调用前者的afterPropertiesSet()方法,以及后者的destroy()方法.

前者称为初始化回调,Spring建议我们不要采用实现接口InitializingBean来实现初始化回调,因为这样会带来与业务Bean的耦合,最好的方法是采用 beaninit-method属性.

后者称为析构回调,同样, Spring建议我们不要采用实现接口DisposableBean来实现析构回调,

因为这样会带来与业务Bean的耦合,最好的方法是采用 beandestroy-method属性.

<o:p> </o:p>

default-init-method defalult-destroy-method的用法.

<o:p> </o:p>

7 web环境优雅的关闭Spring IoC

JVM里注册一个关闭钩子

AbstractApplicationContext ctx=new ClassPathXmlApplicationContext(new String[](“beans.xml”));

Ctx.registerShutdownHook();

<o:p> </o:p>

8 BeanFactoryAware接口

BeanFactory实例管理的bean是可怜的,因为他们默认不能感知BeanFactory实例的存在,但是,有了BeanFactoryAware接口,让这一切都变得可能.

实际上BeanFactoryAware接口里只有一个方法:setBeanFactory(),但就是这个方法,使bean可以获得BeanFactory的实例,进而获取其它的bean实例,当然这会影响耦合性.

现在来用BeanFactoryAware接口,<span style="FONT-FAMILY: 宋体; mso-ascii-font-family: Calibri; mso-ascii-theme-font: minor-latin; mso-fareast-font-family: 宋体; mso-fareast-th

你可能感兴趣的:(spring,AOP,bean,配置管理,IOC)