`
sw1982
  • 浏览: 504763 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

spring对bean的管理

阅读更多
1.spring中,bean默认是单例模式singleton。默认加载为lazy-load .

2.lazy-load的时候,bean工厂会把定义信息载入进来,不过仅在显式调用的时候才会去实例化。在spring中配置一个quartz定时任务器的时候,用到了下面的配置:一开始没有把“sfactory”显示的指明为立即加载,导致任务跑不起来。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">
<beans default-lazy-init="true">

    
<!-- spring调度工厂 -->
    
<bean id="sfactory"
        class
="org.springframework.scheduling.quartz.SchedulerFactoryBean"
         singleton
="true" lazy-init="false">
        
<property name="triggers">
            
<list>
                
<ref local="cronTrigger" />
            
</list>
        
</property>
    
</bean>

    
<!-- spring触发trigger -->
    
<bean id="cronTrigger"
        class
="org.springframework.scheduling.quartz.CronTriggerBean">
        
<property name="jobDetail">
            
<ref bean="exampleJob" />
        
</property>
        
<property name="cronExpression">
            
<!-- run every morning at 6 am -->
            
<value>0 0 03 * * ?</value>
        
</property>
    
</bean>


    
<!-- 任务实现类 -->
    
<bean name="exampleJob"
        class
="org.springframework.scheduling.quartz.JobDetailBean">
        
<property name="jobClass">
            
<value>com.decentsoft.smmail.mail.task.TrashCatalogClearTask</value>
        
</property>
        
<property name="jobDataAsMap">
            
<map>
                
<entry key="mailOperationService"> 
                    
<ref bean="mailOperationService"></ref> 
                
</entry> 
            
</map>
        
</property>
    
</bean>


</beans>

3.bean的加载过程:
  1)容器寻找Bean的定义信息,并且将其实例化。
 2)使用依赖注入,Spring按照Bean的定义信息配置Bean的所有属性。
 3)如果实现了BeanNameAware接口,工厂会调用Bean的setBeanName()传给Bean的ID
 4)如果实现了BeanFactoryAware接口,工厂调用setBeanFactory()方法传入工厂自身
5)如果有BeanPostProcessor和Bean关联,那么它们的postProcessBeforeInitialzation()会被调用。
6)如果Bean指定了init-method方法,将被调用。
7)如果有BeanPostProcessor和Bean关联,那么它们的postProcessAfterInitialzation()会被调用。

bean的销毁:
1)可以实现DisposableBean接口
2)配置bean时候指定定制的销毁方法。
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics