JavaRush /Blog Jawa /Random-JV /Spring Framework. Pambuka
Marchello
tingkat
Санкт-Петербург

Spring Framework. Pambuka

Diterbitake ing grup
Hello! Nalika administrasi JavaRush nggarap level anyar, aku pengin miwiti seri artikel latihan babagan Spring Framework. Ya, aku ngerti manawa ana akeh materi babagan topik iki ing Internet, nanging, minangka praktik nuduhake, kabeh ana ing tingkat Hello World. Aku ora pengin ngomong babagan cara nempatake anotasi kanthi bener, nanging babagan cara kerjane "ing hood". Artikel kasebut ditujokake kanggo wong-wong sing wis nggarap kerangka iki kanthi cara siji utawa liyane lan ngerti konsep dhasar. Spring Framework.  Pambuka - 1

Initializing konteks.

Dadi ayo miwiti kanthi dhasar. Ing mratelakake panemume, salah siji saka TCTerms paling penting kanggo ngerti carane konteks diatur lan buncis diinisialisasi. Kaya sing sampeyan ngerteni, sadurunge Spring wiwit digunakake, kudu dikonfigurasi. Ing jaman kuno, iki ditindakake kanthi nggunakake file xml (ing sawetara proyek, utamane sing lawas, terus ditindakake nganti saiki). Iki minangka conto cilik saka file konfigurasi kasebut:
<?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-3.0.xsd">

   <bean id="helloWorld" class="ru.javarush.HelloWorld">
       <property name="message" value="Hello World!"/>
   </bean>

</beans>
Umumé, iki cukup kanggo nggawe sawetara pengontrol lan miwiti wiwitan (sing ora bakal mandheg). Nanging kepiye konfigurasi iki bakal nggawe Spring bisa digunakake? Lan ing kene dadi menarik. Supaya konfigurasi kita bisa dingerteni dening Spring, ana XmlBeanDefinitionReader. BeanDefinitionIki minangka komponen Spring internal sing mindai (ngurai) xml lan nggawe 's adhedhasar apa kita wrote ana . BeanDefinitionminangka obyek sing nyimpen informasi babagan kacang. Iki kalebu: saka kelas endi (kacang) kudu digawe; ruang lingkup; apa initialization puguh wis diinstal; Apa perlu kanggo initialize sadurunge kacang iki liyane lan sifat liyane sing diterangake ing xml. Kabeh ditampa BeanDefinition's ditambahake menyang HashMap, kang pengenal jeneng kacang (nyetel dening sampeyan utawa diutus dening Spring) lan BeanDefinitionobyek dhewe. Sawise kabeh BeanDefinitiondigawe, pahlawan anyar katon ing panggung - BeanFactory. Obyek iki iterates liwat HashMap’es BeanDefinition, nggawe kacang buncis adhedhasar mau lan sijine menyang wadhah IoC. Ana nuansa ing kene, nyatane, nalika aplikasi diwiwiti, wadah IoC bakal ngemot kacang buncis sing duwe ruang lingkup Singleton (diset kanthi gawan), dene liyane digawe nalika dibutuhake (prototipe, panyuwunan, sesi). Lan saiki digression cilik, ayo kenalan karo karakter liyane.

Ketemu BeanPostProcessor. (BPP)

prosesor pos kacangKasunyatane yen kacang ora mesthi dadi kelas logika bisnis kanggo aplikasi sampeyan. Kacang buncis uga disebut kacang infrastruktur. Ing cendhak, kacang infrastruktur minangka kelas sing ngatur kacang logika bisnis sampeyan (ya, akeh banget kacang). Aku bakal pitutur marang kowe liyane babagan ing ngisor iki, nanging kanggo nggawe iku sethitik luwih cetha apa persis BPP configures, Aku bakal menehi conto. Apa kabeh wong ngerti ringkesan kasebut @Autowired? Dadi, sampeyan AutowiredAnnotationBeanPostProcessortanggung jawab kanggo mesthekake yen kabeh kelas wis dipasang ing saben liyane. ora ngerti

Ayo bali menyang BeanFactory

Ngerti saiki babagan BPP, sampeyan kudu njlentrehake yen nalika ngulang HashMap's, BeanDefinitionkabeh pisanan digawe lan diselehake kanthi kapisah (ora ing wadhah IoC) BeanPostProcessor. Sawise iki, kacang buncis biasa saka logika bisnis digawe, dilebokake ing wadhah IoC, lan konfigurasi kasebut wiwit nggunakake BPP sing ditundha kanthi kapisah. Lan iki kedadeyane, saben BPP duwe 2 cara:
postProcessorBeforeInitialization(Object bean, String beanName);
postProcessorAfterInitialization(Object bean, String beanName);
Iterates liwat tong sampah kita kaping pindho. Kaping pisanan cara disebut postProcessorBeforeInitialization, lan kaping pindho cara disebut postProcessorAfterInitialization. Mesthine wis muncul pitakonan kenapa rong cara dibutuhake, aku bakal nerangake. Kasunyatane yaiku kanggo ngolah sawetara anotasi (kayata @Transactional, contone), kacang kita diganti karo kelas proxy. Kanggo ngerti apa iki rampung, sampeyan kudu ngerti cara kerjane @Transactional, lan iki cara kerjane. Sampeyan kudu nambahake sawetara baris kode menyang cara sing ditandhani karo anotasi iki kanthi cepet. Carane nindakake? Bener, kanthi nggawe kelas proxy, ing njero kode sing dibutuhake bakal ditambahake menyang metode sing dibutuhake. Saiki bayangake kahanan iki, kita duwe kelas:
class A {
    @Autowired
    private SomeClass someClass;

    @Transactional
    public void method() {
        // модификатор доступа обязательно public
    }
}
Kelas iki nduweni 2 anotasi @Autowiredlan @Transactional. Loro-lorone anotasi diproses dening BPP sing beda. Yen kerjane luwih dhisik AutowiredBPP, mula kabeh bakal apik, nanging yen ora, kita bakal nemoni masalah iki. Kasunyatane yaiku nalika kelas proxy digawe, kabeh informasi meta ilang. Ing tembung liyane, ora bakal ana informasi babagan anotasi @Autowireding kelas proxy, lan mulane AutowiredBPPora bakal bisa digunakake, tegese lapangan kita someClassbakal duwe nilai null, sing bakal nyebabake NPE. Sampeyan uga kudu ngerti yen ing antarane metode panggilan, metode - diarani postProcessorBeforeInitialization, yen ana siji. Iki Sejatine konstruktor kapindho, nanging prabédan iku ing wayahe kabeh dependensi kita wis ditempelake ing kelas lan kita bisa ngakses saka -metode. Dadi, sepisan maneh algoritma initialization konteks: postProcessorAfterInitializationinitinit
  1. XmlBeanDefinitionReadermindai file konfigurasi xml kita.
  2. Nggawe BeanDefinition's lan sijine wong ing HashMap.
  3. Teka BeanFactorylan saka iki HashMapkapisah nambah munggah kabeh BeanPostProcessor's.
  4. Nggawe BeanDefinitionkacang buncis saka 's lan sijine ing wadhah IoC.
  5. Ing kene BPP teka lan ngatur kacang iki nggunakake 2 cara.
  6. siyap.
Bener, iku kabeh, nulis yen sampeyan seneng artikel lan apa iku worth terus nulis tutorial kuwi.
Komentar
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION