powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring. Внедрение через конструктор.
4 сообщений из 4, страница 1 из 1
Spring. Внедрение через конструктор.
    #38999851
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пробую сделать примеры из книги "Spring in action".
Класс Juпgler (компонент).
Код: 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.
package by.faystgreen.springIdols.performers;
import by.faystgreen.springIdols.exeptions.PerfomanceExeption;
public class Juggler implements Performer {

	private int beanBags = 3;
	
	
	public Juggler() {
		super();
	}

	public Juggler(int beanBags) {
		super();
		this.beanBags = beanBags;
	}

	public Juggler(String beanBags) {
		super();
		this.beanBags = Integer.parseInt(beanBags) + 10;
	}
	
	public void perform() throws PerfomanceExeption {
		System.out.println("JUGGLING " + beanBags + " BEANBAGS");
	}
}


Класс запуска выполнения(выступление жонглеров).
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
package by.faystgreen.springIdols;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import by.faystgreen.springIdols.exeptions.PerfomanceExeption;
import by.faystgreen.springIdols.performers.Performer;

public class StartPerform1 {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("SpringConf1.xml");
		Performer duke = (Performer) context.getBean("duke");
		Performer duke2 = (Performer) context.getBean("duke2");
		Performer duke3 = (Performer) context.getBean("duke3");
		try {
			duke.perform();
			duke2.perform();
			duke3.perform();
		} catch (PerfomanceExeption e) {
			e.printStackTrace();
		}
	}
}


XML-описание компонентов.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
 	<!-- Компонент duke будет создан на основе конструктора по умолчанию-->
	<bean id="duke" class="by.faystgreen.springIdols.performers.Juggler"></bean>
	
	<!-- Компонент duke2 будет создан на основе конструктора, который содержит количество мячей для жонглирования-->
	<bean id="duke2" class="by.faystgreen.springIdols.performers.Juggler">
	    <constructor-arg value="15" />
	</bean>
	
	<bean id="duke3" class="by.faystgreen.springIdols.performers.Juggler">
	    <constructor-arg value="30" />
	</bean>
</beans>



Объекты duke2 и duke3 оба создаются через конструктор со строковым параметром. Как сделать, чтобы duke2 запускался с интовым значением?
...
Рейтинг: 0 / 0
Spring. Внедрение через конструктор.
    #38999863
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вопрос решился. Тег <constructor-arg> имеет параметр type, и при установке его в значение "int" компонент будет создан через интовый конструктор.
...
Рейтинг: 0 / 0
Spring. Внедрение через конструктор.
    #38999980
faustgreen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще 1 вопрос по Spring-у:
есть класс
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
package by.faystgreen;

public class Auditorium {
	void turnOnLights(){
		System.out.println("Light is on");
	}
	
	void turnOffLights(){
		System.out.println("Light is off");
	}
}



есть его описание как бина в XML-файле:
Код: java
1.
2.
3.
	<bean id="auditorium" class="by.faystgreen.Auditorium"  
	   init-method="turnOnLights"
       destroy-method="turnOffLights"/>



И файл запускающий все на выполнение:
Код: 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.
29.
30.
package by.faystgreen.springIdols;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import by.faystgreen.springIdols.exeptions.PerfomanceExeption;
import by.faystgreen.springIdols.performers.Performer;

public class StartPerform1 {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext("SpringConf1.xml");
		Performer duke = (Performer) context.getBean("duke");
		Performer duke2 = (Performer) context.getBean("duke2");
		Performer duke3 = (Performer) context.getBean("duke3");
		Performer poeticDuke = (Performer) context.getBean("poeticDuke");
		Performer kenny = (Performer) context.getBean("kenny");
		Performer kenny2 = (Performer) context.getBean("kenny2");
		try {
			duke.perform();
			duke2.perform();
			duke3.perform();
			poeticDuke.perform();
			kenny.perform();
			kenny2.perform();
		} catch (PerfomanceExeption e) {
			e.printStackTrace();
		}
	}
}



Так вот, в последнем блоке кода(StartPerform1) нигде нет явного вызова бина auditorium, но при этом метод инит этого объекта выполняется. Получается Spring на старте создает все описанные в конфигурации объекты(и следовательно выполняет методы инициализации). Можно ли сделать, чтобы объекты создавались только при вызове их ?
...
Рейтинг: 0 / 0
Spring. Внедрение через конструктор.
    #39000430
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
faustgreen,

Код: java
1.
lazy-init="false"



http://www.pretechsol.com/2013/08/spring-lazy-init-example.html#.VZpMf3XtlBc

?

Xml - это конечно хорошо , но может начать с java config :)?

а лучше с понимания спринга и его трех замечательных констрикторах

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


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