Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Hello World через Spring, Bean or not Bean, непонятно как работает / 7 сообщений из 7, страница 1 из 1
07.07.2017, 16:55
    #39484762
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
Ура, Hello World выведен в консоль с помощью Spring.
http://projects.spring.io/spring-framework/
pom.xml
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>GroupId</groupId>
    <artifactId>MessageServiceSpring</artifactId>
    <version>1.0-SNAPSHOT</version>


    <dependencies>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.3.9.RELEASE</version>
        </dependency>
    </dependencies>
</project>



MessageService.java
Код: java
1.
2.
3.
4.
5.
package hello;

public interface MessageService {
    String getMessage();
}



MessagePrinter.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
package hello;

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

@Component
public class MessagePrinter {

    final private MessageService service;

    @Autowired
    public MessagePrinter(MessageService service) {
        this.service = service;
    }

    public void printMessage() {
        System.out.println(this.service.getMessage());
    }
}




Application.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
package hello;

import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.*;

@Configuration
@ComponentScan
public class Application {
    // непонятно как работает *** начало
    @Bean
    MessageService mockMessageService() {
        return new MessageService() {
            public String getMessage() {
              return "Hello World!";
            }
        };
    }
    // непонятно как работает *** конец

  public static void main(String[] args) {
      ApplicationContext context = 
          new AnnotationConfigApplicationContext(Application.class);

      MessagePrinter printer = context.getBean(MessagePrinter.class);

      printer.printMessage();
  }
}



Начинаю разбирать как же это все получилось.
Решил подебажить:
попытка 1 - ApplicationContext context = - ушел в дебри по самое... чуть не зае... мучал кнопку F7,
попытка 2 - MessagePrinter printer = - опять попал в дебри.
попытка 3 - printer.printMessage(); - просто не дала понимания.

объясните пожалуйста простыми словами, что, как и в какой момент происходит в методе MessageService mockMessageService() ? и о чем спрингу говорит аннотация @Bean?
...
Рейтинг: 0 / 0
07.07.2017, 17:45
    #39484807
Imperous
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
нашел инфу http://spring-projects.ru/guides/lessons/lesson-2/, вопрос пока отпал
...
Рейтинг: 0 / 0
10.07.2017, 10:29
    #39485538
SQL2008
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
А для чего вам интерфейс interface MessageService , который нигде не унаследован?
...
Рейтинг: 0 / 0
10.07.2017, 11:33
    #39485603
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
SQL2008,

в спринге насколько я помню, есть определенный нюанс в инициализации бина от класса или от интерфейса. не помню точно что но помню что иногда ругается. )) хотя да, скрытый смысл втыкать везде интерфейсы, когда они имплементят один единственный класс на приложение для меня остается загадкой.
...
Рейтинг: 0 / 0
10.07.2017, 11:35
    #39485605
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
пардон, инициализация=инжекция.
...
Рейтинг: 0 / 0
10.07.2017, 11:41
    #39485616
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
andreykaTв спринге насколько я помню, есть определенный нюанс в инициализации бина от класса или от интерфейса. не помню точно что но помню что иногда ругается. )) хотя да, скрытый смысл втыкать везде интерфейсы, когда они имплементят один единственный класс на приложение для меня остается загадкой.
Определенный нюанс называется JDK Proxy и в актуальных версиях Spring проблемой не является.
...
Рейтинг: 0 / 0
10.07.2017, 12:14
    #39485653
andreykaT
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Hello World через Spring, Bean or not Bean, непонятно как работает
<spring-boot.version>1.5.3.RELEASE</spring-boot.version>

совсем недавно что-то там накрутил, сам не понял что, с бинами и инжектами и получил это самое знакомое сообщение.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Hello World через Spring, Bean or not Bean, непонятно как работает / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]