Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Eclipse e Spring

  1. #1

    Eclipse e Spring

    Salve, capisco che la domanda può essere banale ma mi servirebbe un aiuto, vorrei cercare di usare Spring, ho installato eclipse e mi sono scaricato il plug-in di spring tramite eclipse marketplase, creo un nuovo progetto "Spring project", quando cerco di importare "org.springframework.." per fare degli semplici esercizi per iniziare ad usare IoC mi da errore, "The import org.spring cannot be resolved"
    come devo fare? GRAZIE

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281

    Re: Eclipse e Spring

    Originariamente inviato da fuoricorso
    Salve, capisco che la domanda può essere banale ma mi servirebbe un aiuto, vorrei cercare di usare Spring, ho installato eclipse e mi sono scaricato il plug-in di spring tramite eclipse marketplase, creo un nuovo progetto "Spring project", quando cerco di importare "org.springframework.." per fare degli semplici esercizi per iniziare ad usare IoC mi da errore, "The import org.spring cannot be resolved"
    come devo fare? GRAZIE
    Se scegli il wizard chiamato "Spring Project", crea sì un progetto di "natura" Spring ma non aggiunge alcun jar specifico di Spring (Spring è suddiviso in tanti moduli, sai tu quali intendi usare). Dovresti aggiungerli tu nel Java Build Path -> Libraries.

    Se scegli il wizard "Spring Template Project", ti permette di scegliere tra una serie di template che creano un progetto con un scheletro già prefatto e con certe librerie incluse. Ma potrebbero anche non andarti bene e comunque questi tipi di progetti sono basati su Maven, quindi devi sapere come usarlo.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3

    Grazie

    Ciao ti ringrazio per la risposta ma non riesco a risolvere, in realtà ho un dubbio.
    Ho scaricato il pacchetto,in formato zip, di spring dal sito ufficile. Ora devo aggiungere solo i file jar o tutto il file zip, che poi comprenderebbe anche la documentazione e tutti gli altri file, oppure, ed è questo il dubbio, visto che già ho il plugin di spring in eclipse non devo considerare altri file esterni.
    Posso aggiungere i file durante la creazione del progetto File->New->Spring Project (Simple Java) ->Next->Libraries->Add External Jars o Add Libray ?
    Se aggiungo i file jar dal pacchetto che ho scaricato sembra che import org.springframework... non mi da problemi, mentre se aggiungo il file.zip come library non cambia nulla rispetto a prima.

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Ecco un breve tutorial per iniziare a provare Spring con una "bean-factory" in una semplice e normale applicazione "standalone".

    Serve:
    1) Il pacchetto dei binari di Spring Framework. Faccio riferimento alla 3.2.4 (l'ultima del ramo 3.2 che c'è al momento). Lo zip da prendere è spring-framework-3.2.4.RELEASE-dist.zip.
    Dentro lo zip c'è la cartella libs, servono come minimo 2 jar:
    - spring-core-3.2.4.RELEASE.jar
    - spring-beans-3.2.4.RELEASE.jar

    2) Il pacchetto dei binari di Apache Commons Logging. Questa è una dipendenza che serve a Spring. Faccio riferimento alla 1.1.3 (l'ultima al momento). Lo zip (c'è anche tar.gz) è commons-logging-1.1.3-bin.zip.
    Del contenuto di questo zip serve solo 1 jar:
    - commons-logging-1.1.3.jar

    Nota: questi zip/tar.gz, possono essere scaricati/spacchettati dove si vuole, non centrano nulla, direttamente, con Eclipse o con il progetto finale.


    Progetto in Eclipse:
    1) È sufficiente creare un comune e classico "Java Project". Non è nemmeno necessario avere il "plugin" di Spring, dato che verranno aggiunti i jar "a mano" nel progetto.
    Il progetto può avere nome e locazione qualunque.

    2) Nelle proprietà del progetto, in Java Build Path (tab Libraries), usare il pulsante "Add External JARs" e aggiungere i 3 jar indicati sopra.
    Questo si può fare già dal wizard mentre si crea il progetto, sia appena dopo che è stato creato. Chiaramente va fatto prima di poter compilare/eseguire!

    3) Si crea una classe che ha il main(), es. ProvaSpring. Può stare in un package con nome o nel package "unnamed" ("default package" in Eclipse). Non ha importanza.

    codice:
    import java.awt.Rectangle;
    
    import org.springframework.beans.factory.support.BeanDefinitionReader;
    import org.springframework.beans.factory.support.DefaultListableBeanFactory;
    import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
    import org.springframework.core.io.ClassPathResource;
    
    public class ProvaSpring {
        public static void main(String[] args) {
            DefaultListableBeanFactory factory = new DefaultListableBeanFactory();
            BeanDefinitionReader reader = new XmlBeanDefinitionReader(factory);
            reader.loadBeanDefinitions(new ClassPathResource("prova-beans.xml", ProvaSpring.class));
    
            Rectangle unRettangolo = (Rectangle) factory.getBean("rettangolo");
            System.out.println("rettangolo = " + unRettangolo);
        }
    }
    4) Allo stesso livello di ProvaSpring.java creare un file prova-beans.xml. Come si vede dal codice Java, viene caricato cercando in classpath, nello stesso package della classe.

    codice:
    <?xml version="1.0" encoding="UTF-8"?>
    <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.xsd">
    
        <bean id="punto" class="java.awt.Point">
            <constructor-arg value="30" />   
            <constructor-arg value="50" />   
        </bean>
    
        <bean id="dimensione" class="java.awt.Dimension">
            <constructor-arg value="200" />   
            <constructor-arg value="100" />   
        </bean>
    
        <bean id="rettangolo" class="java.awt.Rectangle">
            <property name="location" ref="punto" />
            <property name="size" ref="dimensione" />
        </bean>
    
    </beans>
    Compilare ed avviare.
    L'output su console dovrebbe essere qualcosa tipo:

    ago 08, 2013 10:52:22 PM org.springframework.beans.factory.xml.XmlBeanDefin itionReader loadBeanDefinitions
    INFO: Loading XML bean definitions from class path resource [/prova-beans.xml]
    rettangolo = java.awt.Rectangle[x=30,y=50,width=200,height=100]


    Spero sia stato utile.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Ti ringrazio per le tue risposte, sei hai un po' di tempo volevo sapere perchè hai incluso quel jar di commons-logging-1.1.3.jar per le dipendenze, deve essere sempre incluse nei progetti.

    In rete ho trovato alcuni esempi di esercizi a volte mi danno errori perchè il codice è deprecato e devo cercare di modificarli facendo uso di altre classi o metodi.

    Ho provato il tuo esempi e funziona ovviamente ;-) ma certe classi non li avevo ancora viste, sai dirmi dove posso trovare un buon tutorial?

    Ho provato a fare un esercizi proposto dal tutorial del sito html ma per alcune classi mi davano problemi perchè era codice deprecato ho cercato di usare altre classi e interfacce per il container ma comunque mi da errore dicendomi che non trova il file bean.xml, secondo te qual'è il problema?

    codice:
    public class ReportClient {
    	
    	
    	public static void main(String[] args)
    	{
    		String data=null;
    		try{
       ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");			
    			ReportGenerator gen =(ReportGenerator)app.getBean("reportGenerator");
    			gen.generate(data).saveToFile();
    		}
    		catch(BeansException e){ e.printStackTrace();}	
    	}
    
    }
    
    
    
    10-ago-2013 13.08.00 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
    INFO: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@5d764be1: startup date [Sat Aug 10 13:08:00 CEST 
    
    2013]; root of context hierarchy
    10-ago-2013 13.08.00 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
    INFO: Loading XML bean definitions from class path resource [bean.xml]
    org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [bean.xml]; 
    
    nested exception is java.io.FileNotFoundException: class path resource [bean.xml] cannot be opened because it does not exist
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:343)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:303)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions
    
    (AbstractBeanDefinitionReader.java:180)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions
    
    (AbstractBeanDefinitionReader.java:216)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions
    
    (AbstractBeanDefinitionReader.java:187)
    	at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions
    
    (AbstractBeanDefinitionReader.java:251)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions
    
    (AbstractXmlApplicationContext.java:127)
    	at org.springframework.context.support.AbstractXmlApplicationContext.loadBeanDefinitions
    
    (AbstractXmlApplicationContext.java:93)
    	at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory
    
    (AbstractRefreshableApplicationContext.java:130)
    	at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:551)
    	at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:465)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:139)
    	at org.springframework.context.support.ClassPathXmlApplicationContext.<init>(ClassPathXmlApplicationContext.java:83)
    	at nuovo.ReportClient.main(ReportClient.java:21)
    Caused by: java.io.FileNotFoundException: class path resource [bean.xml] cannot be opened because it does not exist
    	at org.springframework.core.io.ClassPathResource.getInputStream(ClassPathResource.java:158)
    	at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:329)
    	... 13 more

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,281
    Originariamente inviato da fuoricorso
    Ti ringrazio per le tue risposte, sei hai un po' di tempo volevo sapere perchè hai incluso quel jar di commons-logging-1.1.3.jar per le dipendenze, deve essere sempre incluse nei progetti.
    commons-logging è una dipendenza "storica" di Spring.
    Puoi leggere sulla documentazione ufficiale (3.2):
    http://static.springsource.org/sprin...erview-logging

    e sul SpringSource Blog:
    http://blog.springsource.org/2009/12...ies-in-spring/

    Loro stessi (quelli di SpringSource) ammettono che se potessero oggi rifare Spring Framework da zero, utilizzerebbero non la commons-logging ma la SLF4J, che è un altro "facade" (facciata) per una libreria di logging.

    La cosa buona di commons-logging è che se non trova in classpath una libreria di logging (come Log4J), si limita ad usare il logging del JDK (java.util.logging) che per default, senza configurazioni particolari, stampa su console (standard-output).
    Per questo motivo non ti ho detto altro sul logging nel mio esempio: di base ottieni, e a gratis senza configurazione, il log su standard-output.

    A volte insieme a Spring si usano altre librerie (es. Apache Tiles) che richiedono SLF4J. In tal caso invece di avere due facade di logging e altre complicazioni, si tende ad avere una gestione comune per il logging. Si può usare la jcl-over-slf4j, che implementa la stessa API di commons-logging ma in realtà "butta" il log su SLF4J, il quale, con un jar apposito di implementazione, è in grado di loggare ad esempio su Log4J.
    Sono scenari un po' più avanzati, questi. Se ti ho detto cose o nomi che non comprendi, non c'è problema. Se stai iniziando con Spring, includi la commons-logging e hai il tuo bel log su console, di serie.

    Originariamente inviato da fuoricorso
    In rete ho trovato alcuni esempi di esercizi a volte mi danno errori perchè il codice è deprecato e devo cercare di modificarli facendo uso di altre classi o metodi.
    Sì, anche Spring Framework, evolvendo, rende deprecate alcune classi man mano che le versioni si susseguono. Nel mio esempio, se avessi usato Spring Framework 3.0 o inferiore, avrei potuto usare XmlBeanFactory che era un pochino più diretta e semplice da usare. Ma dalla 3.1 è deprecata.

    Originariamente inviato da fuoricorso
    Ho provato il tuo esempi e funziona ovviamente ;-) ma certe classi non li avevo ancora viste, sai dirmi dove posso trovare un buon tutorial?
    C'è il Reference Manual e il javadoc ufficiali di Spring Framework sul sito http://www.springsource.org/spring-framework

    Originariamente inviato da fuoricorso
    Ho provato a fare un esercizi proposto dal tutorial del sito html ma per alcune classi mi davano problemi perchè era codice deprecato ho cercato di usare altre classi e interfacce per il container ma comunque mi da errore dicendomi che non trova il file bean.xml, secondo te qual'è il problema?
    Innanzitutto tieni presente che una cosa è una "bean factory" (come nel mio esempio) e un'altra cosa è un "application context".
    Entrambi offrono alla base il container che contiene i bean e permette la dependency injection. Ma un application context offre molto di più (anche qui: la reference ufficiale lo spiega in dettaglio).

    Originariamente inviato da fuoricorso
    codice:
       ApplicationContext app = new ClassPathXmlApplicationContext("bean.xml");
    bean.xml viene cercato usando il classpath (lo si vede dal nome della classe) e il file, non essendo xyz/bean.xml, viene cercato "alla radice" in classpath, ovvero non in un package. Dipende quindi dove hai messo bean.xml. Se ReportClient è in un package e bean.xml l'hai messo in quel package ... è ovviamente sbagliato.

    Se vuoi che bean.xml sia relativo al package di ReportClient (concettualmente proprio come ho fatto nel mio esempio), usa l'altro costruttore:
    ClassPathXmlApplicationContext(String path, Class clazz)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Grazie credo che mi convenga leggere direttamente le specifiche del framework ma cercavo un tutorial più breve e possibilmente in italiano ;-).
    ti ringrazio per le tue risposte.
    Leggo un po' il manuale credo che avrò altri problemi .

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.