1.之前上一章主要介绍了JSR-330协议用到的一些比较常见的注入标签,使用它们可以简化Spring的开发工作,下面我以一个简单的例子加入说明。
2.1接口类MessageProvider
2.2 它的接口实现类
注意:
1.@Named("messageProvider")这个标签申明了以后,可以供其他的服务类使用。
2. @Inject @Named("message")
可以注入属性,也可以注入服务类等
2.3 调用上面类的接口类
2.4 实现MessageRenderer的实现类,如下所示:
2.5 配置文件。
注意:
1.<context:component-scan base-package="com.apress.prospring3.ch5.jsr330"/> 表示的是要扫描的类路径,该目录下的JAVA类都会被Spring容器识别.
2. <bean id="message" class="java.lang.String">
<constructor-arg value="You are running JSR330!"/>
</bean>
申明的这个bean刚好在ConfigurableMessageProvider中使用到了。
2.6 Main函数实现类
(关于它们的具体用法,可以参考Java 依赖注入标准(JSR-330)简介)
(完,待续...................................)
2.1接口类MessageProvider
public interface MessageProvider {
public String getMessage();
}
import javax.inject.Inject;
import javax.inject.Named;
@Named("messageProvider")
public class ConfigurableMessageProvider implements MessageProvider {
private String message = "Default message";
public ConfigurableMessageProvider() {
}
@Inject
@Named("message")
public ConfigurableMessageProvider(String message) {
this.message = message;
}
public void setMessage(String message) {
this.message = message;
}
public String getMessage() {
return message;
}
}
2. @Inject @Named("message")
可以注入属性,也可以注入服务类等
2.3 调用上面类的接口类
public interface MessageRenderer {
public void render();
public void setMessageProvider(MessageProvider provider);
public MessageProvider getMessageProvider();
}
2.4 实现MessageRenderer的实现类,如下所示:
import javax.inject.Inject;
import javax.inject.Named;
import javax.inject.Singleton;
@Named("messageRenderer")
@Singleton
public class StandardOutMessageRenderer implements MessageRenderer {
@Inject
@Named("messageProvider")
private MessageProvider messageProvider = null;
public void render() {
if (messageProvider == null) {
throw new RuntimeException(
"You must set the property messageProvider of class:"
+ StandardOutMessageRenderer.class.getName());
}
System.out.println(messageProvider.getMessage());
}
public void setMessageProvider(MessageProvider provider) {
this.messageProvider = provider;
}
public MessageProvider getMessageProvider() {
return this.messageProvider;
}
}
2.5 配置文件。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">
<context:component-scan base-package="com.apress.prospring3.ch5.jsr330"/>
<bean id="message" class="java.lang.String">
<constructor-arg value="You are running JSR330!"/>
</bean>
</beans>
1.<context:component-scan base-package="com.apress.prospring3.ch5.jsr330"/> 表示的是要扫描的类路径,该目录下的JAVA类都会被Spring容器识别.
2. <bean id="message" class="java.lang.String">
<constructor-arg value="You are running JSR330!"/>
</bean>
申明的这个bean刚好在ConfigurableMessageProvider中使用到了。
2.6 Main函数实现类
import org.springframework.context.support.GenericXmlApplicationContext;
public class Jsr330Example {
public static void main(String[] args) {
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext();
ctx.load("classpath:jsr330/jsr330.xml");
ctx.refresh();
MessageRenderer renderer = ctx.getBean("messageRenderer", MessageRenderer.class);
renderer.render();
}
}
(完,待续...................................)