Hlavní menu
Nástroje |
NavigaceSpringPrvní verze Springu je od Roda Johnsona a vyšla zároveň s knihou Expert One-on-One J2EE Design and Development, která popisuje základní filosofii Springu. Pozor! Spring má jedinou implementaci a tak se obecně moc nerozlišují pojmy model a framework. Protože se všude mluví o Springu, jako o frameworku, můžeme říct že "Spring model = Spring framework". Mějte však na paměti, že framework je implementace modelu. Spring FrameworkSpring se skládá z tříd a metod, které jsou rozděleny do 20ti modulů. Tyto moduly se slučují do částí Data Access/Integration, Web, AOP (Aspect Oriented Programming), Instrumentation, Core Container a Test, jak je vidět na obrázku níže ![]() Stručně o jednotlivých modulech:
Pro více informací k jednotlivým modulům se můžete podívat na dokumentaci Springu. Základ SpringuZákladem je konfigurační Springový soubor. Jde o klasický XML soubor, který však používá jmenný prostor Springu. Hlavička takového XML vypadá následovně: <?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-2.0.xsd" /> </beans> Obsahem takového souboru jsou beany, které vznikají při vytvoření kontextu. Kontext vytvoříme následovně: ApplicationContext ctx = new ClassPathXmlApplicationContext("cz/zcu/kiv/project/beanDefinition.xml"); Pak už můžeme od kontextu požadovat potřebné beany. BeansBean je ve světě Springu to samé, co objekt. Beany jsou objekty popsané v konfiguračním souboru Springu jako elementy. <beans> <bean id="foo" class="x.y.Foo"/> </beans> Dependency Injection a Inversion of ControlSpring podporuje DI dvěma hlavními způsoby – DI konstruktoru a DI setteru. Mějme třídu: package x.y; public class Foo { private Baz baz; public Foo(Bar bar) { // ... } public void setBaz(Baz baz) { this.baz=baz; } } DI pak nastavíme ve Springovém XML konfiguračním souboru: <beans> <bean id="foo" class="x.y.Foo"> <constructor-arg ref="bar"/> <property name="baz" ref="baz"/> </bean> <bean id="bar" class="x.y.Bar"/> <bean id="baz" class="x.y.Baz"/> </beans> Spring pak při vytváření volá konstruktor s parametry, které jsou v Komponenta a rozhraní komponentyVe Springu je komponenta abstraktní a pro začátečníka je rozdíl mezi objektem, beanou a komponentou prakticky nulový. Odlišnost je pouze v pohledu na věc (beanu) a její použití. Ukažme si tedy jak vypadá komponenta ve Springu: Mějme třídu <beans> <bean id="foo" class="x.y.Foo"/> <bean id="fuu" class="x.z.Fuu"> <constructor-arg type="x.y.IFoo"> <ref bean="foo"/> </constructor-arg> </bean> </beans> Jak je vidět v ukázce výše, tak jsme komponentu injektovali do konstruktoru. Samozřejmě ji můžeme i získat z kontextu někde v těle komponenty Poznámka: Při psaní tohoto úvodu jsem narazil v dokumentaci Springu na několik odkazů na komponentu – notace ShrnutíŘekli jsme si, že se u Springu nerozlišují důsledně pojmy model a framework. My však víme, že model je specifikace a popis. Framework je implementací dané specifikace. Komponentou je pak ve Springu beana, která implementuje alespoň jedno rozhraní. Co komponenta poskytuje, pak mohou být tato implementovaná rozhraní, a co komponenta potřebuje, mohou být atributy konstruktoru. Zde je velice důležité slovíčko mohou, protože stejně jako v OSGi i zde mohu získat komponenty z kontextu za běhu programu. Ovšem narozdíl od OSGi zde nemám žádné metainformace, které by mi řekly, co budu za běhu potřebovat. Praktická částV těchto návodech pracuji s SpringSource Tool Suite, které je trochu odlišné od Eclipsu. Většina věcí je však stejná. TutoriálSpring pro vytvoření nového projektu pro práci se Springem. HelloWorldSpring využívající Springového kontextu. Výsledná implementace: Attach:HelloWorldSpring Příklad MessagePrinterSpring pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: Attach:MessagePrinterSpring Příklad ParkovisteSpring pak dokumentuje jen technologicky specifické problémy. Výsledná implementace: Attach:ParkovisteSpring |