我是Spring的新手,我不喜欢使用.xml作为Spring配置。所以我想只使用注释。以下是我的测试代码,它在没有Spring的情况下运行良好,但是如果我使用DI并添加注释“@Resource”,我得到NullPointException,任何人都可以提供帮助,非常感谢。
我已经导入了相关的Spring罐。这是一个生产者-消费者案例,我想把资源库注入生产者和消费者。
Producer.java
import javax.annotation.Resource;
public class Producer implements Runnable{
@Resource
private ResourcePool qs;
@Override
public void run() {
while (true) {
for(int i = 0;i < Integer.MAX_VALUE; i++) {
try {
qs.produce(i);
System.out.println("Add index = " + i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
消费者.java
import javax.annotation.Resource;
public class Consumer implements Runnable {
@Resource
private ResourcePool qs;
@Override
public void run() {
while(true) {
for (int i = 0; i < 5; i++) {
try {
System.out.println("Remove index = " + qs.comsume());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
try {
Thread.sleep(2000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
资源池.java
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class ResourcePool {
private BlockingQueue<Integer> aBlockingQueue = new ArrayBlockingQueue<Integer>(11);
public void produce(Integer ins) throws InterruptedException{
aBlockingQueue.put(ins);
}
public int comsume() throws InterruptedException{
return aBlockingQueue.take();
}
}
主要功能
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestPC {
public static void main(String[] args){
ExecutorService aExecutor = Executors.newFixedThreadPool(2);
Producer productor = new Producer();
Consumer consumer = new Consumer();
aExecutor.execute(productor);
aExecutor.execute(consumer);
}
}
异常消息:
线程“池-1-线程-2”中的异常 java.lang.NullPointer在测试中出现异常。消费者.run(消费者.java:14) at java.util.concurrent.ThreadPoolExecutor.runWorker(未知来源) at java.util.concurrent.ThreadExecutor$Worker.run(未知来源) at java.lang.Thread.run(未知来源) 线程 “池-1-线程-1” 中的异常 java.lang.NullPointerException at testbq.Producer.run(Producer.java:14) at java.util.concurrent.ThreadPoolExecutor.runworker(未知来源) at java.util.concurrent.ThreadPoolExecutor$Worker.run(未知来源) 在 java.lang.Thread.run(未知来源)
谢谢
你不能使用新的生产者(),
因为它会创建一个新的生产者
,根本不使用Spring。您需要将应用程序上下文作为注释上下文加载,并从上下文中加载 Producer
:
public class TestPC {
public static void main(String[] args){
ExecutorService aExecutor = Executors.newFixedThreadPool(2);
ApplicationContext ctx =
new AnnotationConfigApplicationContext("your.package.com");
Producer producer = ctx.getBean(Producer.class);
Consumer consumer = ctx.getBean(Consumer.class);
aExecutor.execute(productor);
aExecutor.execute(consumer);
}
}
您必须将 your.package.com
替换为生产者
类和使用者
类所在的基包。
在搜索“无XML的Spring配置”或基于Java的Spring配置时,您可能已经在几分钟内自己弄清楚了。
您还没有定义任何由@Configuration
注释的类托管的bean creatiion方法-因此Spring能够知道您实际要注入的内容。
@Configuration
// optional @ComponentScan(basePackages = {"name.your.package.here"}
public class AppConfig
{
@Bean // or @Bean(name = "nameOfYourBean")
public ResourcePool getResourcePool()
{
return new ResourcePool();
}
}
然后,您应该在main方法中创建一个Spring上下文,并将AppConfig加载到您的上下文中:
AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(AppConfic.class);
高温高压
本文向大家介绍详解在Spring3中使用注解(@Scheduled)创建计划任务,包括了详解在Spring3中使用注解(@Scheduled)创建计划任务的使用技巧和注意事项,需要的朋友参考一下 Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下; 在Spr
问题内容: 我必须缺少一些确实显而易见的东西……我尝试按照此处的示例来解析一个简单的XML文件:http : //golang.org/src/pkg/encoding/xml/example_test.go 正如您将在底部看到的那样,没有映射任何属性或子元素-方向- 元帅或反元帅。据我所知,这几乎与上述example_test.go中所做的事情完全相同(我唯一能看到的区别是该测试中的类型在该函数
问题内容: 我需要在Linux / OSX终端下使用“干净的” shell(例如bash),而无需任何用户配置,但是每次启动时,它都会从某些文件(例如〜/ .bashrc)中读取配置信息。每当我需要“干净”的外壳时,我都可以修改该文件,并在完成后将其还原,但是有没有更简单的方法来执行此操作,例如命令? 问题答案: 您可以传递和命令行选项: 您可以在手册页中找到有关这些选项的文档。
问题内容: 我想知道使用shellscript解析XML文件的最佳方法是什么? 应该一个人手工做吗? 第三层图书馆是否存在? 如果您已经做到了,请告诉我您是如何做到的 问题答案: 您可以尝试xmllint xmllint程序解析一个或多个XML文件,这些文件在命令行上指定为xmlfile。根据选择的选项,它会打印各种类型的输出。这对于检测XML代码和XML解析器中的错误很有用 它允许您使用–pat
问题内容: 如何解析XML,以及如何使用jQuery浏览结果?这是我的示例XML: 我想通过此路径找到节点-> -> -> ? 问题答案: 有此功能: 您可以像这样使用它: 如果您确实想要一个对象,则需要一个插件。
我想创建一个完全不使用任何XMLs的Spring应用程序(不web.xml不context.xml或任何东西)。到目前为止,它似乎工作得很好,除了我的视图解析器有一些问题,我不能自己解决。 这是我的WebApplicationInitializer 还有我的spring配置 最后是我的控制器 位于。 因此,如果我在控制器中使用注释,那么控制器会给我响应“index”,因此我知道我的配置至少在某种程