Можно ли избавиться от проводки класса XML / Config в контейнере Spring IOC? - PullRequest
0 голосов
/ 22 декабря 2018

Я учусь использовать Spring и, в частности, IOC.Я хотел бы использовать аннотации, чтобы избавиться от определяющих bean-файлов конфигурации, и я подумал, что именно для этого и нужна аннотация @Autowired, но мои бины, похоже, не создаются, когда я его использую, поэтому я не знаюесли я делаю что-то не так или если это просто не так, как это должно работать.

web.xml:

 <?xml version="1.0" encoding="UTF-8"?>
 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     xmlns="http://xmlns.jcp.org/xml/ns/javaee"
     xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
     version="3.1">

<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>org.example.demo.ticket.webapp.rest.SpringConfig</param-value>
</context-param>
<context-param>
    <param-name>contextClass</param-name>
    <param-value>org.springframework.web.context.support.AnnotationConfigWebApplicationContext</param-value>
</context-param>
</web-app>

SpringConfig class:

package org.example.demo.ticket.webapp.rest;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;

@Configuration
@ComponentScan("org.example.demo.ticket")
public class SpringConfig {

}

Пример ресурса, который я хочу подключить, и класс, в котором я хочу его использовать:

package org.example.demo.ticket.webapp.rest.resource;

import org.springframework.stereotype.Component;

@Component("exe")
public class Example {

    private String name;

    public Example() {
        name = "Whatever";
    }

}

package org.example.demo.ticket.webapp.rest.resource.projet;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ProjectResource {

    private Example exe;

    @Autowired
    public void setExe(Example pExe) {
        exe = pExe;
    }
}

Теперь, когда я создаю экземпляр объекта ProjectResource, я ожидаю, что он будет снабжен созданным exe-файлом,но это не то, что происходит, атрибут exe всегда равен nulll.

1 Ответ

0 голосов
/ 22 декабря 2018

Вы можете рассмотреть возможность создания приложения с помощью Spring Boot.Он автоматически сканирует Бины, поэтому вам не нужно указывать пакеты.А если вы хотите создать бин, вы можете придерживаться аннотаций @Component, @Service или @Controller:)

https://spring.io/guides/gs/spring-boot/

...