浅析Spring IOC(控制反转)

一、BeanFactory轻量级 三种访问ApplicationContext.xml方式: 1、Resource resource = new ClassPathResource(“application.xml”); BeanFactory factory = new XmlBeanFactory(resource); HelloWorld hello = factory.getBean(“fileHelloWorld”); 2、基于文件找到application.xml InputStream is = new FileInputStream(“src/application.xml”); BeanFactory factory = new XmlBeanFactory(is); 3、基于ApplicationContext ClassPathXmlApplicationContext appContext = new ClassPathXmlApplicationContext(new String[]{“application.xml”}); BeanFactory factory = (BeanFactory)appContext; Bean的生命周期 1、实例化JavaBean 2、JavaBean实例初始化,即通过IOC注入其依赖性。这一阶段将完成JavaBean实例初始化 3、基于Spring应用对JavaBean实例的使用 4、IOC容器销毁JavaBean实例 Bean的创建

<bean name=”fileHelloWorld” class=”com.jader.FileHelloWorld”>

HelloWorld实例将使用无参数构建器创建出来

<bean name=”fileHelloWorld” class=”com.jader.FileHelloWorld” factory-method=”createHelloWorldInstance”>

HelloWorld必须提供createHelloWorldInstance的静态方法

<bean name=”helloWorldFactory” class=”com.jader.FileHelloWorldFactory” /><bean name=”fileHelloWorld” class=”com.jader.FileHelloWorld” factory-bean=”helloWorldFactory’ factory-method=”createFileHelloWorldInstance”>

此种情况类不需要提供静态方法,命名为fileHelloWorld的JavaBean实例将通过helloWorldFactory工厂类的createFileHelloWorldInstance方法获得

==>

通过ref元素引用Spring配置文件中的fileHello,ref有以下几个属性: 1、bean:在当前Spring XML配置文件中,或者在同一个BeanFactory(applicationContext)中的其他JavaBean中 2、local:在当前Spring XML配置文件中,其依赖的JavaBean必须存在于当前Spring XML配置文件中, 3、parent:用于指定其依赖的父JavaBean定义 初始化JavaBean 1、如果开发者使用了元素的autowire属性,Spring能够自动将目标JavaBean需要注入的JavaBean找到并注入进来。 2、如果开发者指定了元素的dependency-check属性,则能够保证各个Spring配置文件中各个JavaBean之间的相互关系。 3、借助于setter方法能够将JavaBean的属性值注入进来,这些属性可以是Java原型(primitive)、对象类型,甚至可以是null 例如:

<bean id=”helloWorld” class=”org.springframework.transaction.interceptor.TransactionProxyFactoryBean”><property name=”transactionManager”><ref local=”transactionManager”/></property><property name=”transactionAttributers”><props><prop key=”get*”>PROPAGATION_REQUIRED,readOnly</prop><prop key=”set*”>PROPAGATION_REQUIRED</prop></props></property></bean>

Spring框架能够注入TransactionProxyFactoryBean中的transactionManager、target、transactionAttributes所需的属性值。比如:transactionManager属性取值通过ref引用了transactionManager的POJO服务。如果Spring配置文件中不存在事务管理器,开发者有两种做法: 单独定义新的transactionManager,例如:

==></bean>

ref会引用transactionManager 定义内部JavaBean方法:

==></bean></property>

通过定义内部JavaBean,其他JavaBean便不能够引用到他,而且开发者再也不能够重用JtaTransactionManager。现实场合存在这种需求,存在即是合理。 4、如果JavaBean实现了如下接口,还需要调用setBeanFactory方法 org.springframework.beans.factory.BeanFactoryAware 其定义了方法如下: void setBeanFactory(BeanFactory beanFactory) throws BeansException; 5、Spring框架提供了若干接口,供开发者改变配置再BeanFactory中JavaBean的行为适用,其中InitializingBean接口介绍如下: org.springframework.beans.factory.InitializingBean在BeanFactory初始化JavaBean时,BeanFactory会调用那些实现了InitializingBean接口的JavaBean中包含的方法: void afterPropertiesSet() throws Exception;// InitializingBean定义的方法 6、最后通过在元素中包含init-method属性能够达到同InitializingBean一样的目的,即:

<bean name=”fileHelloWorld” class=”com.openv.spring.HelloWorld” init-method=”init”>

HelloWorld将实现init方法 通过以上6步,完成JavaBean实例的初始化工作 使用JavaBean 借助于getBean方法,开发者就能够在应用中使用他了 销毁JavaBean 一旦将基于Spring的应用停止,Spring框架将调用那些JavaBean实例中存在的生命周期方法,比如:DisposableBean接口的JavaBean或者那些在Spring配置文件中指定了destory-method属性的JavaBean。 最终Spring将销毁JavaBean实例。 注意:这些内容只适合于那些通过singleton方法创建的JavaBean实例,对于那些以prototype方式创建的JavaBean实例,Spring并不能够控制器生命周期,因为这种JavaBean实例创建成功,整个JavaBean将交付给Spring应用去管理。 其中,DisposableBean介绍如下: org.springframework.beans.factory.DisposableBean:在BeanFactory销毁JavaBean时,BeanFactory会调用那些实现了DisposableBean接口的JavaBean中包含的如下方法: void destory() throws Exception; 其中,destroy是DisposableBean定义的方法。 当然,通过在元素中包含destroy-method属性能够达到同DisposableBean一样的目的,即:

=>不做任何解释。没有人明白,

浅析Spring IOC(控制反转)

相关文章:

你感兴趣的文章:

标签云: