Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring. Внедрение через конструктор. / 4 сообщений из 4, страница 1 из 1
05.07.2015, 13:46
    #38999851
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring. Внедрение через конструктор.
Пробую сделать примеры из книги "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
05.07.2015, 14:04
    #38999863
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring. Внедрение через конструктор.
Вопрос решился. Тег <constructor-arg> имеет параметр type, и при установке его в значение "int" компонент будет создан через интовый конструктор.
...
Рейтинг: 0 / 0
05.07.2015, 18:44
    #38999980
faustgreen
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring. Внедрение через конструктор.
Еще 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
06.07.2015, 12:42
    #39000430
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Spring. Внедрение через конструктор.
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
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring. Внедрение через конструктор. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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