您的位置:首页 > 编程语言 > Java开发

Java 依赖注入标准(JSR-330)简介例子

2012-05-22 09:04 393 查看
1.之前上一章主要介绍了JSR-330协议用到的一些比较常见的注入标签,使用它们可以简化Spring的开发工作,下面我以一个简单的例子加入说明。

2.1接口类MessageProvider

public interface MessageProvider {

public String getMessage();

}

2.2 它的接口实现类

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;

}

}

注意: 1.@Named("messageProvider")这个标签申明了以后,可以供其他的服务类使用。

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();

}

}

(关于它们的具体用法,可以参考Java 依赖注入标准(JSR-330)简介)

(完,待续...................................)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: