spring 配置文件里属性 注入方式问题

_凤求凰_ 发布于 2011/08/21 14:26
阅读 3K+
收藏 1
大侠们,我最近做的一个 发送mail 的程序,spring里配置的是 信息是从properties文件里加载进来的。最近想改成从数据库里读取的方式。突然就没有思路了。哪个哥哥能给个思路指点一下我。不胜感激
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl"> 
        <property name="host" value="${mail.host}" /> 
        <property name="username" value="${mail.username}" /> 
        <property name="password" value="${mail.password}" /> 
        <property name="defaultEncoding" value="UTF-8"></property> 
        <property name="javaMailProperties"> 
            <props> 
                <prop key="mail.smtp.auth">${mail.smtp.auth}</prop> 
                <prop key="mail.smtp.timeout">${mail.smtp.timeout}</prop> 
            </props> 
        </property> 
    </bean>  
加载中
0
scl33
scl33

你说的从数据库读取JAVAMAIL的配置?

那意思就是运行期才动态配置JAVAMAIL了对吧, 不运行怎么访问数据库呢?

那问题就好办了, 删除你的配置, NEW 一个 JAVAMAIL 实例, 调用设置方法, 一切OK! 

不用配置了, 动态运行的东西是配不出来的, 除非你自己实现一个查数据库并初始化MAIL实例的工厂类. 

这样的设计失去了配置的意义.

0
RainJ
RainJ

可以利用工厂方法生成一个properties, 然后把properties注入到javaMailSenderImpl.

或者利用init方法启动的时候load并初始化。

0
菜根乱谭
菜根乱谭

构建一个MailConfig的bean,在bean里加入host,username,password等必要的field,生成getter,setter方法,bean中提供一个构造方法或者其他方式,将bean初始化时,从数据库中读取配置,为field赋值。

在spring配置文件,配置该bean,用该bean替换properties,可否?

_凤求凰_
_凤求凰_
挺好的思路,安装你的思路。在spring配置文件,配置该bean,然后 <bean id="mailInfo" class="某个从数据库取得mail参数的bean类"/> 接下来。 例如 <property name="host" value="我想知道这里改怎么调用那个bean的host属性呢?" />
0
菜根乱谭
菜根乱谭

引用来自“谭明智”的答案

构建一个MailConfig的bean,在bean里加入host,username,password等必要的field,生成getter,setter方法,bean中提供一个构造方法或者其他方式,将bean初始化时,从数据库中读取配置,为field赋值。

在spring配置文件,配置该bean,用该bean替换properties,可否?

@范庆辉 : 我想到有两种方法,第一种采用org.springframework.beans.factory.config.PropertyPathFactoryBean,将一个bean的属性值赋值给另一个bean的属性值。还有种方法就是继承JavaMailSenderImpl,将mailInfo这个bean作为一个它的一个属性,通过setter方法注入进去。把mailInfo的值赋值给相应的属性。
0
ExtremeTalk
ExtremeTalk
应该是自己写一个支持DB数据源的PlaceHolderConfigurer。最近hold一词好像比较火啊
返回顶部
顶部