このxmlベースの構成があります。しかし、私のプロジェクトではJavaアノテーションベースの設定を使用したいと思います。変換を行う方法は?
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="mailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
<property name="Host" value="mail.csonth.gov.uk"/>
</bean>
<bean id="registrationService" class="com.foo.SimpleRegistrationService">
<property name="mailSender" ref="mailSender"/>
<property name="velocityEngine" ref="velocityEngine"/>
</bean>
<bean id="velocityEngine" class="org.springframework.ui.velocity.VelocityEngineFactoryBean">
<property name="velocityProperties">
<value>
resource.loader=class
class.resource.loader.class=org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader
</value>
</property>
</bean>
</beans>
_@Configuration
_(_org.springframework.context.annotation.Configuration
_)で注釈が付けられたクラスを作成し、XMLファイル内の各Bean宣言に対して、このクラス内に_@Bean
_(_org.springframework.context.annotation.Bean
_)メソッドを作成します。
_@Configuration
public class MyConfiguration {
@Bean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("mail.csonth.gov.uk");
return mailSender;
}
@Bean
public SimpleRegistrationService registrationService(JavaMailSenderImpl mailSender, VelocityEngineFactoryBean velocityEngine) {
SimpleRegistrationService registrationService = new SimpleRegistrationService();
registrationService.setMailSender(mailSender);
registrationService.setVelocityEngine(velocityEngine);
return registrationService;
}
@Bean
public VelocityEngineFactoryBean velocityEngine() {
VelocityEngineFactoryBean velocityEngine = new VelocityEngineFactoryBean();
Properties velocityProperties = new Properties();
velocityProperties.put("resource.loader", "class");
velocityProperties.put("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
velocityEngine.setVelocityProperties(velocityProperties);
return velocityEngine;
}
}
_
この例では、mailSender
およびvelocityEngine
Beanがアプリケーション構成の別の場所で必要であると想定しています。これは、提供されたXML構成によって暗黙的に指定されるためです。これが当てはまらない場合、つまりmailSender
およびvelocityEngine
Beanがonlyである場合、registrationService
Beanを構築するために宣言する必要はありません。 mailSender()
およびvelocityEngine()
メソッドをパブリックとして使用することも、_@Bean
_で注釈を付ける必要もありません。
この構成クラスを読み取るようにSpringに指示することができます
@ComponentScan("your.package.name")
クラスをAnnotationConfigApplicationContext
に登録します。
_ AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MyConfiguration.class);
context.refresh();
_
@glitchの回答は役に立ちましたが、以下の行でエラーが発生しました。
velocityEngine.setVelocityProperties("resource.loader=class", "class.resource.loader.class=org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
どのように私はそれを修正しました。以下が完全な実装です
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.javamail.JavaMailSenderImpl;
import com.vlclabs.adsops.service.SendEmailServiceImpl;
import org.springframework.ui.velocity.VelocityEngineFactoryBean;
import Java.util.Properties;
@Configuration
public class EmailConfiguration {
@Bean
public JavaMailSenderImpl mailSender() {
JavaMailSenderImpl mailSender = new JavaMailSenderImpl();
mailSender.setHost("mail.csonth.gov.uk");
return mailSender;
}
@Bean
public SendEmailServiceImpl registrationService(JavaMailSenderImpl mailSender, VelocityEngineFactoryBean velocityEngine) {
SendEmailServiceImpl registrationService = new SendEmailServiceImpl();
registrationService.setMailSender(mailSender);
registrationService.setVelocityEngine(velocityEngine.getObject());
return registrationService;
}
@Bean
public VelocityEngineFactoryBean velocityEngine() {
VelocityEngineFactoryBean velocityEngine = new VelocityEngineFactoryBean();
Properties velocityProperties = new Properties();
velocityProperties.put("resource.loader", "class");
velocityProperties.put("class.resource.loader.class", "org.Apache.velocity.runtime.resource.loader.ClasspathResourceLoader");
velocityEngine.setVelocityProperties(velocityProperties);
return velocityEngine;
}
}