snd*_*ndu 6 java xml spring javabeans
我有这个基于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>
Run Code Online (Sandbox Code Playgroud)
创建一个用@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;
}
}
Run Code Online (Sandbox Code Playgroud)
此示例假定应用程序配置中的其他位置需要mailSender和velocityEnginebean,因为您提供的XML配置暗示了这一点.如果不是这种情况,即如果mailSender和velocityEnginebean 只需要构造registrationServicebean,那么你不需要将mailSender()和velocityEngine()方法声明为public,也不需要使用它进行注释@Bean.
您可以指示Spring读取此配置类
@ComponentScan("your.package.name")使用AnnotationConfigApplicationContext例如注册课程
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
context.register(MyConfiguration.class);
context.refresh();
Run Code Online (Sandbox Code Playgroud)