Hibernate + Spring MVC:外部对象库

时间:2012-02-01 06:41:30

标签: java hibernate spring-mvc

我有两个使用相同数据库对象的不同应用程序(site + some cron utility)。我将它们移动到单独的库中,在应用程序中我只留下了hibernate.configuration文件。

现在,问题是我有一些使用JavaMailSender的电子邮件通知服务,它具有在spring配置文件中定义的属性:

<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host" value="mail.xxx.com" />
        <property name="username" value="xxx" />
        <property name="password" value="xxx" />
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">true</prop>
                <prop key="mail.smtp.starttls.enable">true</prop>
                <prop key="mail.smtp.ssl.trust">*</prop>
            </props>
        </property>
    </bean>
    <bean id="notificationsService" class="de.crm.NotificationsService">
        <property name="sender" ref="mailSender" />
        <property name="properties" ref="notificationsServiceProperties" />
    </bean>
    <bean id="notificationsServiceProperties" class="de.crm.objects.properties.NotificationsServiceProperties">
        <property name="name" value="xxx" />
        <property name="email" value="xxx" />
    </bean>

所以这里的主要问题是它无法看到de.crm.objects.properties.NotificationsServiceProperties类,因为它是在外部库中定义的,并且项目在导出时失败。

有没有办法将属性类留在外部库中并修复它? 谢谢

UPD#1:是否可以使用带有@Autowired注释的外部库Spring的对象?

2 个答案:

答案 0 :(得分:1)

So the main problem here that it can't see de.crm.objects.properties.NotificationsServiceProperties class because
     

它在外部库中定义,项目在导出时失败。

如果类没有包含在项目的类路径中,则Spring无法识别它/库。因此,您需要确保您的库内部或外部包含在类路径中。

UPD#1: Is it possible to use objects from external library Spring's with @Autowired annotation?

@Autowired仅提供弹簧上下文中存在的那些对象。如果一个类在spring上下文之外,即使它包含在classpath中,它也不会被@Autowired识别。

修改

首先,将类(例如,foo.Bar)添加到类路径中。

其次,在spring配置xml中添加一个新的bean定义:

<bean class="foo.Bar"></bean>

现在,您可以使用@Autowired:

访问此对象
public class SomeOtherClassInSpringContext {
    @Autowired
    Bar myBar;
}

P.S。如果您还没有这样做,还需要应用<context:annotation-config/><context:component-scan base-package="path.to.your.classes"/>,以告诉您已经使用注释配置了一些类。

有关详细信息,请参阅Spring docs

答案 1 :(得分:0)

如果我做对了,你应该把包含你的外部类的JAR放在应用程序的类路径上。然后,Spring的上下文将显示您的类。 这就是我们为配置数据源所做的工作。 一般来说,Spring可以处理类路径中的每个类......