Spring Framework + JavaBeans

0

Cześć

Chce przechowywać dane w xml. A wyciągac je za pomocą JB+spring
Mam takie pliki jak

Helloworld.java

package przyklady.rozdzial3;

public class HelloWorld {

    private Integer value;
    public void hello()
    {
        System.out.println("Hell");
    }
     public void setValue(Integer value)
    {
        this.value = value;
        System.out.println(value + " " +this.value);
    }

}

HelloWorldExample.java

package przyklady.rozdzial3;


import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class HelloWorldExample {
    public static void main(String[] args)
    {
        Resource xmlConfigFile = new ClassPathResource("/przyklady/rozdzial3/helloworld.xml");
        XmlBeanFactory xmlFactory = new XmlBeanFactory(xmlConfigFile);

        HelloWorld Bean = (HelloWorld)xmlFactory.getBean("helloworld");
        
        Bean.setValue(7);

    }

}

helloworld.xml

<beans>
     <bean id = "helloworld"
     class="przyklady.rozdzial3.HelloWorld"
    name="witajswiecie"
     >

         <property name="kret"><kret>5</vkret></property>
     </bean>
     
</beans>

Widzę 7, a chcę widzieć 5 ;p

Pozdrawiam :)

0

Oczywiście powinno być :
helloworld.xml


         <property name="value"><value>5</value></property>

Zaczołem kombinować i przez to błąd się wkradł się w poście. Problem nadal aktualny :)

0

Jak chcesz widziec 5 to nie ustawiaj na 7 [???] Przeciez dostajesz beana ze springa i pozniej jawnie ustawiasz na 7, czyli robisz override tego co spring tam wstawil.
Poza tym nadal cos z tymi twoimi znacznikami jest nie teges - po co name="value" i jeszcze znaczniki <value>?

0

Zdecydowanie jest coś nie tak. Jeśli nie dam się to wyskakuje, że muszę podac argument, czyli jakby coś xml był źle napisany lub hellloworld.

Gdzieś popełniłem błąd implementacyjny tylko nie wiem gdzie.

Posiłkowałem się ksiązką http://jdn.pl/files/springframework-dla-praktykow.pdf . Jeśli ktoś zna lepszy przykład prawidłowy przechowywania informacji w xml dla beanow i wywowałanie ich to chętnie skorzystam i zapomne o tym przykładzie :)

Pozdrawiam :)

0

Jednak okazuje sie ze to jest poprawne. Ja zawsze uzywalem <property name="value" value="5"> ale ok.
A co do 7 zamiast 5, to juz chyba problem rozwiazany tak?

0

To może jeszcze raz z updatem ::. ;]

HelloWorld.java

/*

package przyklady.rozdzial3;

public class HelloWorld {

    private Integer value;
    public void hello()
    {
        System.out.println("Hell");
    }
     void setValue(Integer value)
    {
        
        System.out.println(this.value);
        System.out.println(value);

    }



}

helloworld.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  " - //SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <bean id = "helloworld"
     class="przyklady.rozdzial3.HelloWorld"
     name="witajswiecie">
         <property name="value" value="5"></property>
     </bean>
     
</beans>

HelloWorldExample.java

package przyklady.rozdzial3;


import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;
public class HelloWorldExample {
    public static void main(String[] args)
    {
        Resource xmlConfigFile = new ClassPathResource("/przyklady/rozdzial3/helloworld.xml");
        XmlBeanFactory xmlFactory = new XmlBeanFactory(xmlConfigFile);

        HelloWorld Bean = (HelloWorld)xmlFactory.getBean("helloworld");
        
        Bean.setValue();  // Mam wrażenie, że dane nie są pobierane z xml, a wrecz jestem pewien

    }

}

Może Spring tego nie potrafi. W każdym razie...
Chcę stworzyć beana, który będzie wykorzystywany w innych programach. Związku z tym, aby nie grzebać w samym beana, bo ma dobry szkielet (tu trochę ponosi mnie wyobraźnia :-D) decyduję się aby wartości które mogą ulec zmienie były przechowywane w XML. Założmy, że xml jest bazą danych która na pewno ulegnie zaktualizowaniu. Nie uważam za efektywane grzebanie za każdym razem w Bean :)

Pozdrawiam :)

0

Nie do konca rozumiem co piszesz.
Ten ostatni kod sie nawet nie kompiluje - wywolujesz setValue() a przeciez ta metoda bierze parametr.
Jak dostajesz beana ze springa to on ma wartosc 5 chyba ze znalazles buga w springu - warpie. Jak nastepnie wywolasz setValue(7) to nowa wartosc bedzie 7 i tyle, ale tylko bean ma ta wartosc, XML pozostaje bez zmian. Nastepne uruchomienie aplikacji nadal stworzy beana z wartoscia 5. Jesli chodzi Ci o takie zmienianie beana i zapisywanie tych zmian to beans.xml jest kompletnie zla droga do tego.

0
::. napisał(a)

Ten ostatni kod sie nawet nie kompiluje - wywolujesz setValue() a przeciez ta metoda bierze parametr.
Jak dostajesz beana ze springa to on ma wartosc 5 chyba ze znalazles buga w springu - warpie.

Tak, wiem, ze się nie kompiluje. Jak można to sprawdzić, ze beans ma ze springa wartość 5. po prostu chce mieć pewność, że xml jest dobrze stworzony i dostsrcza potrzebnych informacji do beana ;]

Pozdrawiam

0

Mozesz np zdebugowac i podpatrzyc jaka wartosc ma to pole - nie masz innego wyjscia bo nie masz gettera.
Albo dopisac metode getValue() do HelloBeana, wywolac ja na obiekcie ktory dostales ze spronga i wypisac:
System.out.ptintln(Bean.getValue());

0

oooo ... mogłbyś podać prawidłową implementację tej drugiej metody ? Nie chcę znowu zamieszać ;p

0

żartujesz?

     public Integer getValue()
    {
        return value;
    }
0

Czyli zabierasz sie za springa a nie znasz absolutnych podstaw? W ten sposob bedzie baaardzo ciezko napisac cos ponad to co (kropka w kropke) przepiszesz z tutoriala.

0

package przyklady.rozdzial3;


public class HelloWorld {

    private Integer value;
    public void hello()
    {
        System.out.println("Hell");
    }
     public Integer getValue()
    {
        return value;
    }



}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  " - //SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <bean id = "helloworld"
     class="przyklady.rozdzial3.HelloWorld"
     name="witajswiecie">
         <property name="value" value="5"></property>
     </bean>
     
</beans>
package przyklady.rozdzial3;


import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class HelloWorldExample {
    public static void main(String[] args)
    {
        Resource xmlConfigFile = new ClassPathResource("/przyklady/rozdzial3/helloworld.xml");
        XmlBeanFactory xmlFactory = new XmlBeanFactory(xmlConfigFile);

        HelloWorld Bean = (HelloWorld)xmlFactory.getBean("helloworld");
        
        System.out.println(Bean.getValue());

    }

}

Chciałem uniknąć kolejnego wklejania kodu. Dlaczego nie wyswietla 5 ?

0

Moim zdaniem dlatego ze skasowales settera (setValue(Integer)) i jak teraz spring ma to ustawic? To w ogole dziala? Nie ma wyjatku springa? Jaki dostajesz wynik?
Gosciu, nie chce Cie obrazic ani nic, ale naprade powinienes zajac sie podstawammi przynajmniej na poczatek.

0

Rozumiem, że pobieranie danych przez beana ze xml to wyższa szkoła jazdy ? Zmieniam kod jak chcesz. Ja tez nie wiem o co Ci chodzi, probuję to jakoś wpleść to co mówisz. Dlatego odpoczątku piszę, zebyś zaimplementował to Ty. Kazdą twoją radę dodaję.

PROBLEM BRZMI: BEAN POBIERA DANE z XML. NASTEPNIE WYWOLUJE BEANA I CHCE ZEBY WYKONAL JAKAS TAM FUNKCJE I MI WYRZUCIL TA DANA Z XML PO PRZEROBCE.

0

@JamSam: gwoli ścisłości, to bean żadnych danych z XMLa nie pobiera. XMLa czyta SpringFramework przy starcie kontekstu, później tylko dostarcza beany na podstawie wcześniej wczytanych danych.
Poza tym skoro napisali Ci, żebyś dodał getter, to po co skasowałeś setter? Nikt Ci nie kazał tego robić.
IMHO ten kod bez settera nie będzie działać, i powinieneś dostać wyjątek. W ogóle jesteś pewien, że kontekst Springa startuje prawidłowo? :D

0

Nie robisz co mowie, robisz wiecej - mowie ze masz dodac gettera, a ty wywalasz settera i sie dziwisz ze nie dziala.
Nikt za Ciebie nic nie napisze, mozesz dostac tylko rady, ktore dostales.
I krzyczysz. W tym momencie znacznie zmniejszyles prawdopodobienstwo ze ktos pomoze. Tym bardziej ze na podstawie tego co juz dostales wszystko powinno byc zrobione.

0

package przyklady.rozdzial3;


public class HelloWorld {

    private Integer value;
    public void hello()
    {
        System.out.println("Hell");
    }
     public void setValue(Integer value)
     {
       this.value=value;
     }

     public Integer getValue()
    {
        return value;
    }



}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  " - //SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <bean id = "helloworld"
     class="przyklady.rozdzial3.HelloWorld"
     name="witajswiecie">
         <property name="value" value="5"></property>
     </bean>
     
</beans>
package przyklady.rozdzial3;


import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class HelloWorldExample {
    public static void main(String[] args)
    {
        Resource xmlConfigFile = new ClassPathResource("/przyklady/rozdzial3/helloworld.xml");
        XmlBeanFactory xmlFactory = new XmlBeanFactory(xmlConfigFile);

        HelloWorld Bean = (HelloWorld)xmlFactory.getBean("helloworld");
        
        System.out.println(Bean.getValue());

    }

}

Wynik "null".

0

Ten XML ktory wkleiles jest dobry? Masz spacje w 'id = "helloworld"', XML na to nie pozwala.

0

Po usunięciu spacji nadal "null"

0

helloworld i HelloWorld to coś zupełnie innego

0

Zmienilem nazwę xml. Wszystko na helloworld też ... Aczkolwiek teraaz pojawia sie wyjątek. A wiec nie mam beana ;p ?

2010-05-20 14:54:47 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
INFO: Loading XML bean definitions from class path resource [przyklady/rozdzial3/HelloWorld.xml]
Exception in thread "main" org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'HelloWorld' is defined
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:391)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:999)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:233)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:170)
        at przyklady.rozdzial3.HelloWorldExample.main(HelloWorldExample.java:15)
Java Result: 1
0

No to zmień jeszcze xmlFactory.getBean("HelloWorld");
na xmlFactory.getBean("helloworld");

Mówiąc jednak szczerze to daj sobie na razie spokój ze Springiem, bo widać, że nie rozumiesz nawet podstaw Javy.
Najpierw naucz się Javy SE, później przejdź do Javy EE/Springa.

0

Było tak już ...

0
package przyklady.rozdzial3;

public class HelloWorld {

    private Integer value;
    public void hello()
    {
        System.out.println("Hell");
    }
	public Integer getValue() {
		return value;
	}
	public void setValue(Integer value) {
		this.value = value;
	}

}
package przyklady.rozdzial3;


import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.ClassPathResource;
import org.springframework.core.io.Resource;

public class HelloWorldExample {
    public static void main(String[] args)
    {
        Resource xmlConfigFile = new ClassPathResource("/przyklady/rozdzial3/helloworld.xml");
        XmlBeanFactory xmlFactory = new XmlBeanFactory(xmlConfigFile);

        HelloWorld Bean = (HelloWorld)xmlFactory.getBean("helloworld");
       
        System.out.println(Bean.getValue());

    }
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC  " - //SPRING//DTD BEAN//EN"
        "http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
     <bean id = "helloworld"
     class="przyklady.rozdzial3.HelloWorld"
     name="witajswiecie">
         <property name="value" value="5"></property>
     </bean>
     
</beans>

Wyświetla się <font size="4">5</span>.
Jeżeli nie, to pewnie, dlatego że odwołujesz się do innego pliku helloworld.xml

0

Dziękuje :)

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