Spring - аннотация @Resource - InvocationTargetException во время выполнения
Я читал учебник Spring и наткнулся на следующий пример. Было упомянуто, что Spring поддерживает аннотацию Java EE @Resource. Я пытался пример с источником ниже, но он дал InvocationTargetException. Я полагаю, это произошло из-за того, что объект SpellChecker не мог быть введен должным образом.
Соответствующее отслеживание стека: 27 февраля 2018 г. 20:56:23 org.springframework.context.support.AbstractApplicationContext prepareRefresh INFO: Обновление org.springframework.context.support.ClassPathXmlApplicationContext@5d76b067ST: 27 февраля: дата запуска [27 февр. 2018]; корень иерархии контекста 27 февраля 2018 20:56:32 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitionsINFO: загрузка определений bean-компонентов XML из ресурса пути к классу [Beans.xml] внутри конструктора TextEditor.Inside конструктор SpellChecker, Исключение в потоке "main" java.lang.reflect.InvocationTargetException в java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(собственный метод) в java.base / jdk.internal.reflect.NativeMethodAccessorImpl неизвестно (неизвестно). java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(неизвестный источник) в java.base/java.lang.reflect.Method.invoke(неизвестный источник) в org.springframework.boot.loader.MainMethodRunner.MenhodRunner. Java:48) в org.springframework.boot.loader.Launcher.launch(Launcher.java:87) в org.springframework.boot.loader.Launcher.launch(Launcher.java:50) в org.springframework.boot.loader.JarLauncher.main(JarLauncher.java:51) Вызывается: java.lang.NullPointerException в com.tutorialspoint.TextEditor.spellCheck(TextEditor.java:22) в com.tutorialspoint.MainApp.main(MainApp.java:10) ... еще 8
Я попытался использовать аннотацию @Autowired вместо аннотации @Resource, и она дала ожидаемый результат:
Внутри конструктора TextEditor.
Внутри конструктора SpellChecker.
Внутри чек, орфография.
Хотелось бы узнать, можете ли вы любезно посоветовать / указать на ошибки, если таковые имеются, большое спасибо.
(Ссылка: https://www.tutorialspoint.com/spring/spring_jsr250_annotations.htm)
[TextEditor.java]
import javax.annotation.Resource;
public class TextEditor {
private SpellChecker spellChecker;
public TextEditor() {
System.out.println("Inside TextEditor constructor.");
}
@Resource(name = "spellChecker")
public void setSpellChecker(SpellChecker spellChecker) {
this.spellChecker = spellChecker;
}
public SpellChecker getSpellChecker() {
return spellChecker;
}
public void spellCheck() {
spellChecker.checkSpelling(); //Gave InvocationTargetException here
}
}
[SpellChecker.java]
public class SpellChecker {
public SpellChecker() {
System.out.println("Inside SpellChecker constructor.");
}
public void checkSpelling() {
System.out.println("Inside checkSpelling.");
}
}
[MainApp.java]
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MainApp {
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml");
TextEditor te = (TextEditor) context.getBean("textEditor");
te.spellCheck();
}
}
[Beans.xml]
<?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.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<context:annotation-config/>
<!-- Definition for textEditor bean without constructor-arg -->
<bean id = "textEditor" name = "textEditor" class = "com.tutorialspoint.TextEditor"></bean>
<!-- Definition for spellChecker bean -->
<bean id = "spellChecker" name = "spellChecker" class = "com.tutorialspoint.SpellChecker"></bean>
</beans>