Spring - podstawa

0

Witam
Czytam książkę "Spring w akcji", wszystkie klasy są dla mnie zrozumiałe ale nie potrafię ich wykonać...
Source code mozna pobrać z http://manning.com/walls4/
W Eclipse IDE -> File -> Import -> Existing Projects into Workspace -> wybieram np. katalog springidol
Chciałbym sprawdzić działanie komponentu "duke"
<bean id="duke" class="com.springinaction.springidol.Juggler" />
umieszczonego w pliku konfiguracyjnym "spring-idol.xml"
W książce jest napisane, że mogę to zrobić poprzez

ApplicationContext ctx = new ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml");
Performer performer = (Performer) ctx.getBean("duke");
performer.perform(); 

Tylko gdzie ja mam umieścić ten kod i co kliknąć żeby ten kod się skompilował i uruchomił?
Tworzyłem nową klasę np. "example" w którym umieszczałem powyższy kod w metodzie main() i w Eclipsie klikam Run example i niby mi tworzy pliki .class ale wyskakuje błąd:
Error exist in required project(s):
springidol

a w konsoli wyskakuje to-
Exception in thread "main" java.lang.Error: Unresolved compilation problems:
ApplicationContext cannot be resolved to a type
AnnotationConfigApplicationContext cannot be resolved to a type
MyService cannot be resolved to a type
MyService cannot be resolved to a type

at com.springinaction.springidol.example.main(example.java:30)

Klasa example wyglada tak:

 package com.springinaction.springidol;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class example {

	public static void main(String[] args) {
		ApplicationContext ctx = new ClassPathXmlApplicationContext("com/springinaction/springidol/spring-idol.xml");
		Performer performer = (Performer) ctx.getBean("duke");
		performer.perform(); 
	}
}

Proszę o pomoc

1

Odpuść Springa i naucz się podstaw Javy. Inaczej się nie da. Jak nie umiesz chodzić to nie ma co zabierać się za treningi do maratonu!

Błąd wynika z tego że nie dodałeś do classpath potrzebnych jarów...

0

Czyli muszę utworzyć jakiś katalog w drzewie projektu np. biblioteki i tam nawrzucać "jakieś biblioteki" i potem w tym pliku .classpath wrzucać takie kody
classpathentry kind="lib" path="biblioteki/hibernate-c3p0-4.3.5.Final.jar"/>
tak?

0

Rzuciłeś się na zbyt głęboką wodę.
Używając Eclipse nie musisz ręcznie grzebać w pliku .class. Taką opcję udostępnia twoje IDE. PPM na projekct -> Properties -> Libraries.
Naucz się podstaw Javy, poznaj środowisko programowania - później bierz się za bardziej zaawansowane technologie.

0

ja nie znając podstaw javy uruchamiałam springa tydzień, więc nie polecam

0

Podstawy raczej mam, obiektowość javy dosyć dobrze poznałem i tak jak napisałem w pierwszym poście wszystko w kodzie rozumiem. Problem wynika z tego, że większość robiłem w oparciu o notatnik + cmd. Może faktycznie powinienem bardziej poznać IDE... Możesz mi polecić jakiś tutorial, literaturę?

1

jak jesteś studentem to zacznij od pobrania Intellij IDEA Ultimate https://www.jetbrains.com/student/ jak nie no to Eclipse STS

0

Jeżeli chodzi o środowisko programowania, to jestem zdania, że większość umiejętności powinno się zdobywać JIT. Oczywiście możesz odpalić sobie jakiś obszerny tutorial, ale stracisz na to sporo czasu, a i tak 90% rzeczy nie użyjesz.
Sprawy podstawowe:

  • skróty klawiszowe - tego na necie znajdziesz sporo, jak raz zaczniesz używać z głową to nie będziesz miał problemu z zapamiętaniem,
  • dodawanie jarów - też prosta sprawa,
  • debugowanie, zmiana perspektyw/ dodawanie widoków,
  • no i potem ewentualnie doinstalowywanie pluginów.

Obsługa IDE składa się z małych, często rozdzielnych elementów - tymi, które wymieniłem wyżej powinieneś zainteresować się w pierwszej kolejności, reszta JIT.

0

@seba21007 nie wierzę ci. Nie ma takiej możliwości żebyś napisał cokolwiek większego niż kilkaset linijek kodu w takim podejściu, szczególnie jeśli nie wiesz co znaczy dodać jary do classpath. Wnioskuje więc że znasz co najwyżej absolutne podstawy javy i do nauki technologii enterprise jeszcze sporo ci brakuje. Zainstaluj jakieś normalne IDE (IntelliJ albo Eclipse) i poducz się trochę javy SE. Potem dowiedz sie co to jest maven.

0

Co mi polecisz do Javy SE i Maven?

0

Nie bardzo rozumiem pytanie. Siądź i klep coś, innej drogi nie ma. Wymyśl sobie projekt jakiś i pisz ;] Nauka zarządzania zależnościami za pomocą mavena to 5 min czytania dowolnego tutoriala.

0
Shalom napisał(a):

Nauka zarządzania zależnościami za pomocą mavena to 5 min czytania dowolnego tutoriala.

Bez przesady. Chyba podstawy podstaw. W Mavenie jest trochę więcej możliwości niż zwykłe dodanie zależności.

0

@Hepek jasne że jest! Ale nie ma co rzucać sie na głęboką wodę ze wszystkim. Autor póki co raczej nie potrzebuje żadnego warunkowego budowania, odpalania testów, liczenia pokrycia, zdalnego deployowania ani żadnych innych cudów na kiju. Autor potrzebuje żeby mu sie biblioteki same ściagnęły i aplikacja odpaliła...

0

Witam, nadal mam problem z bibliotekami.

  1. W Eclipsie ustawiłem Classpath Variables na {user}/.m2/repository
  2. Importuje projekt
  3. Konwertuje do Maven
  4. Java Bulid Path dodaje tą ustawioną wcześniej Classpath Variables
  5. Próbuje uruchomić i wyskakują mi błędy jakbym nie miał bibliotek do springa mimo ze maven pobierał do repozytorium biblioteki org.springframework

Błąd jaki mi wyskakuje w konsoli:

 
gru 23, 2014 9:46:52 PM org.springframework.context.support.AbstractApplicationContext prepareRefresh
INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7c3df479: startup date [Tue Dec 23 21:46:52 CET 2014]; root of context hierarchy
gru 23, 2014 9:46:52 PM org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [com/springinaction/springidol/spring-idol.xml]
gru 23, 2014 9:46:53 PM org.springframework.beans.factory.support.DefaultListableBeanFactory preInstantiateSingletons
INFO: Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@31b7dea0: defining beans [duke,poeticDuke,sonnet29,kenny,kenny2,carl,stan,songList,magicSongBook,ricky,saxophone]; root of factory hierarchy
gru 23, 2014 9:46:53 PM org.springframework.beans.factory.support.DefaultSingletonBeanRegistry destroySingletons
INFO: Destroying singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@31b7dea0: defining beans [duke,poeticDuke,sonnet29,kenny,kenny2,carl,stan,songList,magicSongBook,ricky,saxophone]; root of factory hierarchy
Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stan' defined in class path resource [com/springinaction/springidol/spring-idol.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 17): Field or property 'STANS_SONG' cannot be found on object of type 'java.util.Properties'
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456)
	at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:291)
	at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
	at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:288)
	at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:190)
	at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:563)
	at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:872)
	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:423)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
	at com.springinaction.springidol.Main.main(Main.java:10)
Caused by: org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 17): Field or property 'STANS_SONG' cannot be found on object of type 'java.util.Properties'
	at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:140)
	at org.springframework.beans.factory.support.AbstractBeanFactory.evaluateBeanDefinitionString(AbstractBeanFactory.java:1260)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.evaluate(BeanDefinitionValueResolver.java:210)
	at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:182)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1317)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1076)
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:517)
	... 11 more
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 17): Field or property 'STANS_SONG' cannot be found on object of type 'java.util.Properties'
	at org.springframework.expression.spel.ast.PropertyOrFieldReference.readProperty(PropertyOrFieldReference.java:206)
	at org.springframework.expression.spel.ast.PropertyOrFieldReference.getValueInternal(PropertyOrFieldReference.java:71)
	at org.springframework.expression.spel.ast.CompoundExpression.getValueInternal(CompoundExpression.java:57)
	at org.springframework.expression.spel.ast.SpelNodeImpl.getValue(SpelNodeImpl.java:93)
	at org.springframework.expression.spel.standard.SpelExpression.getValue(SpelExpression.java:88)
	at org.springframework.context.expression.StandardBeanExpressionResolver.evaluate(StandardBeanExpressionResolver.java:137)
	... 17 more 

Gdzie robię błąd?

1

Twierdziłeś że znasz podstawy, zaufaliśmy Ci :P, a błędu przeczytać nie potrafisz.
Caused by: org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 17): Field or property 'STANS_SONG' cannot be found on object of type 'java.util.Properties'

0

Wszystko jasne... Kontener ładuje wszystkie swoje komponenty, niezależnie czy wywołuje tylko komponent "duke" w jakiejś tam metodzie... Usunąłem z XML-a wszystkie zbędne komponenty(pewnie z tym problematycznym Songiem) i działa.
Dzięki za szybką pomoc

0

Nie chłopie. Błąd mówi że masz skopane coś w swoim kodzie a nie że masz problem z bibliotekami. WTF. Czy ty w ogóle czytasz te komunikaty? o_O

Exception in thread "main" org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'stan' defined in class path resource [com/springinaction/springidol/spring-idol.xml]: Initialization of bean failed; nested exception is org.springframework.beans.factory.BeanExpressionException: Expression parsing failed; nested exception is org.springframework.expression.spel.SpelEvaluationException: EL1008E:(pos 17): Field or property 'STANS_SONG' cannot be found on object of type 'java.util.Properties'

Podkreśliłem ci nawet gdzie masz błąd. Brak mi słów...

0

Wiem, wiem... Tyle wyskoczyło linijek z "org.springframework.beans.factory...." że skupiłem się na szukaniu w sieci co źle zrobiłem z tym springiem...
Jestem przyzwyczajony do Viusal Studio, a tam błędy nie są aż tak obszerne.
Jak z poziomu cmd mogę wykonać moją Klasę z metoda main, tzn. jakie komendy muszę użyć?
Jak piszę po prostu java com.springinaction.springidol.Main, gdzie Main jest klasą w której jest metoda main(), nie będzie działało.
Muszę coś w stylu java -classpath "tutaj wszystkie scieżki do potrzebnych jarów" com.springinaction.springidol.Main ?

0

Życia ci nie starczy na zbudowanie tego classpatha. Ja bym to spakował do jednego wielkiego jara. Eclipse ma opcje export -> as runnable jar, maven też ma opcje spakowania tego do jednego tłustego jara.

1 użytkowników online, w tym zalogowanych: 0, gości: 1