Я хочу использовать spring @Autowired в проекте отдыха Java. В последние дни я пытаюсь настроить простой весенний проект Java с конфигурацией Java без явной конфигурации bean-компонента, чтобы проверить эту функциональность. Но я не могу заставить его работать. Я могу упустить что-то фундаментальное.
Ни один из подходов, которые я нашел в Интернете и на этом сайте, до сих пор не решил мою проблему. Я не мог найти образец именно для того, чего я пытаюсь достичь тоже. В основном это связано с количеством различных версий пружин и подходов, распространяемых по сети.
Вот так просто, как я мог придумать пример отдыха Java Spring. Я добавил несколько комментариев о том, как я интерпретирую весенние аннотации, поскольку я могу ошибаться и здесь:
Базовый класс приложения
package restoverflow;
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;
@ApplicationPath("/")
public class App extends Application {
}
Конфиг класс
package restoverflow;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
@Configuration //this is a configuration class and also found by spring scan
@ComponentScan //this package and its subpackages are being checked for components and its subtypes
public class AppConfig {
}
Немного Пойо
package restoverflow;
public class Pojo {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
Услуга
package restoverflow;
import org.springframework.stereotype.Service;
@Service //this is a subtype of component and found by the componentscan
public class PojoService {
public Pojo getPojo(){
Pojo pojo = new Pojo();
pojo.setName("pojoName");
return pojo;
}
}
И, наконец, ресурс, где нужно выполнить автоматическое подключение службы
package restoverflow;
import javax.ws.rs.GET;
import org.springframework.beans.factory.annotation.Autowire;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
@Path("/resource")
@Controller //this is a subtype of component and found by the componentscan
public class Resource {
@Autowired //this tells to automatically instantiate PojoService with a default contructor instance of PojoService
private PojoService pojoService;
@GET
@Produces(MediaType.APPLICATION_JSON)
public Pojo getPojo() {
return pojoService.getPojo();
}
}
Pom:
...
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.1.7.RELEASE</version>
</dependency>
...
Я хочу, чтобы сервис pojo был создан. Но я получаю исключение NullPointerException.