powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / пытаюсь разобраться с @autowired
11 сообщений из 11, страница 1 из 1
пытаюсь разобраться с @autowired
    #38339615
Читаю разные статьи. вот наверное лучшая, что я видел. http://javapostsforlearning.blogspot.ru/2012/09/autowired-annotation-in-spring.html

везде в вызывающем коде используется getBean()

В рабочем проекте нашёл пример @autowired, но нигде не делается getBean()
require = false тоже нигде не стоит. Это нормально?
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339622
eledev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очень_Любопытный,

да, это нормально. гетер не обязателен.
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339634
eledev,

а как тогда он понимает какой бин дергать?
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339654
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень_Любопытный,

В статье - примеры для запуска из public static void main. В жизни - большинство проектов .war модули и входной точкой является Servlet или ContextListener прописаный в web.xml.
Повсеместное использование getBean это ошибка. Такой подход называется Service Locator и существовал в J2EE ещё за долго до Spring. Он нужет там где Dependency Injection работать не будет. Dependency Injection обладает рядом преимущество по стравнению с Service Locator, поэтому его стоит использовать максимально.
У того же Фаулера есть хорошая статья по этой теме.
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339655
Есть вообще место, где написано
Код: java
1.
2.
@autowired
private CandidateDao candidateDao;



а CandidateDao вообще среди объявленных бинов отсутствует.
как это работает?
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339657
BlazkowiczОчень_Любопытный,

В статье - примеры для запуска из public static void main. В жизни - большинство проектов .war модули и входной точкой является Servlet или ContextListener прописаный в web.xml.
Повсеместное использование getBean это ошибка. Такой подход называется Service Locator и существовал в J2EE ещё за долго до Spring. Он нужет там где Dependency Injection работать не будет. Dependency Injection обладает рядом преимущество по стравнению с Service Locator, поэтому его стоит использовать максимально.
У того же Фаулера есть хорошая статья по этой теме.
очень интересно.
у меня вот такой web.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.
25.
26.
27.
28.
29.
<web-app id="WebApp_ID" version="2.4"
	xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">

	<display-name>Spring Web MVC Application</display-name>

	<servlet>
		<servlet-name>main</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>main</servlet-name>
		<url-pattern>/rest/*</url-pattern>
	</servlet-mapping>

	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>/WEB-INF/main-servlet.xml
		</param-value>
	</context-param>

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

</web-app>



а что конкретно получается, если не делается getBean ? просто вызывается конструктор?
если так, то зачем тогда нужен
Код: java
1.
require = false

?
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339668
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень_Любопытныйа CandidateDao вообще среди объявленных бинов отсутствует.
как это работает?
Что такое "объявленые бины"? Класс CandidateDao помечен некоторой аннотацией. Spring сканирует классы и регистрирует бины в своём контексте, если они помечены соответствующими аннотациями.
Постарайтесь сформулировать свой вопрос более конкретно. Тогда вы на него сможете получить детальный ответ. Сейчас трудно угадать что именно у вас вызывает недопонимание.
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339671
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень_Любопытныйу меня вот такой web.xml
Код: xml
1.
2.
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<param-value>/WEB-INF/main-servlet.xml



JEE контейнер созаёт экземпляр вышеуказанного класса. Тот создаёт Spring Application Context, используя вышеуказаный конфиг.
Конфиги вида /WEB-INF/*-servlet.xml спринг, вроде вообще сам умеет находить, их в web.xml писать не обязательно.

Очень_Любопытныйа что конкретно получается, если не делается getBean ?

Где делается? Зачем делается?

Очень_Любопытныйпросто вызывается конструктор?
если так, то зачем тогда нужен
Код: java
1.
require = false

?
Предлагается прочитать всю статью чтобы понять что вы имеете ввиду?
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339721
BlazkowiczОчень_Любопытныйа CandidateDao вообще среди объявленных бинов отсутствует.
как это работает?
Что такое "объявленые бины"? Класс CandidateDao помечен некоторой аннотацией. Spring сканирует классы и регистрирует бины в своём контексте, если они помечены соответствующими аннотациями.
Постарайтесь сформулировать свой вопрос более конкретно. Тогда вы на него сможете получить детальный ответ. Сейчас трудно угадать что именно у вас вызывает недопонимание.
под объявленными бинами я имел ввиду бины из xml.
например:
Код: xml
1.
2.
3.
4.
5.
6.
<bean id="CountryBean" class="org.arpit.javapostsforlearning.Country">  
        <property name="countryName" value="India" />  
    </bean>  
    <bean id="CaptialBean" class="org.arpit.javapostsforlearning.Capital">  
        <property name="capitalName" value="Delhi" />  
    </bean>  


авторКласс CandidateDao помечен некоторой аннотацией
Вы правы. аннотацией @Repository.

авторавтора что конкретно получается, если не делается getBean ?

Где делается? Зачем делается?

Как я понимаю, если я вызываю getBean(), то из контекста берется бин(если он уже существует, если нет, то ещё и конструируется) и мне передаётся ссылка на него(что-то типа синглтона).
причем берется по id.
В том случае если getBean() явно не вызывается, то как Spring понимает какой бин взять? просто вызывает конструктор, кладет объект в контекст и при следующей просьбе выдать объект выдаст его же???

про required=false:

автор Конструкция require=false сообщает фреймворку о том, что наличие соответствующего bean'а не является обязательным при компиляции программы. Пример:


Код: java
1.
2.
@Autowired(required=false)
    private NotBeanService notBeanService;


то есть тут я так понял вызовется просто конструктор бина и объект выдастся именно такой.
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339748
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очень_Любопытныйпод объявленными бинами я имел ввиду бины из xml.

Это конфигурация для Spring IoC. Она может быть в xml и аннотациях. Смешивать можно, но крайне не желательно.

Очень_ЛюбопытныйКак я понимаю, если я вызываю getBean(), то из контекста берется бин(если он уже существует, если нет, то ещё и конструируется) и мне передаётся ссылка на него(что-то типа синглтона).
Грубо-говоря - да. Но есть нюансы. Во-первых есть scope, который по-умолчанию singleton. Во-вторых есть параметр lazy. В-третих создаётся не обязательно через конструктор.

Очень_Любопытныйпричем берется по id.

Да.

Очень_ЛюбопытныйВ том случае если getBean() явно не вызывается, то как Spring понимает какой бин взять?

В случае аннотаций, там есть ряд правил описаных в мануле. И по имени класса и по имени поля пытается найти самый подходящий.

Очень_Любопытныйпросто вызывает конструктор, кладет объект в контекст и при следующей просьбе выдать объект выдаст его же???

Да


автор Конструкция require=false сообщает фреймворку о том, что наличие соответствующего bean'а не является обязательным при компиляции программы.
Статья "блещет", конечно. На этапе компиляции никакого контейнера нет, поэтому проверок никаких не будет. Мне в мануал уже лень смотреть. А вы могли бы. На сколько я догадываюсь, что когда контейнер будет создавать текущий бин, при required=false у свойства будет просто null. А при required=true контейнер выкинет исключение, что не найдена зависимость.
...
Рейтинг: 0 / 0
пытаюсь разобраться с @autowired
    #38339760
redwhite90
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Blazkowicz,

спасибо, разъяснили ситуацию.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / пытаюсь разобраться с @autowired
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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