我有两个使用相同数据库对象的不同应用程序(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的对象?
答案 0 :(得分:1)
如果类没有包含在项目的类路径中,则Spring无法识别它/库。因此,您需要确保您的库内部或外部包含在类路径中。So the main problem here that it can't see de.crm.objects.properties.NotificationsServiceProperties class because
它在外部库中定义,项目在导出时失败。
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可以处理类路径中的每个类......