开发者社区> 问答> 正文

在Spring应该如何管理泛型bean呢?

已解决

如题,在Spring应该如何管理泛型bean呢?

展开
收起
小旋风柴进 2016-03-05 08:31:55 4487 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    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时候指定定制的销毁方法。

    2019-07-17 18:52:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
云栖社区特邀专家徐雷Java Spring Boot开发实战系列课程(第20讲):经典面试题与阿里等名企内部招聘求职面试技巧 立即下载
微服务架构模式与原理Spring Cloud开发实战 立即下载
阿里特邀专家徐雷Java Spring Boot开发实战系列课程(第18讲):制作Java Docker镜像与推送到DockerHub和阿里云Docker仓库 立即下载

相关实验场景

更多