Rumah  >  Artikel  >  Java  >  Apakah skop dan kitaran hayat Bean dalam Java Spring

Apakah skop dan kitaran hayat Bean dalam Java Spring

PHPz
PHPzke hadapan
2023-05-03 21:19:131543semak imbas

1.Skop kacang

1.1 Sarung Kacang Ubahsuai

Apakah skop dan kitaran hayat Bean dalam Java Spring

Sebab: Skop lalai Bean ialah mod Singleton, yang bermakna semua orang menggunakan objek yang sama! Apabila kami mempelajari mod singleton sebelum ini, kita semua tahu bahawa menggunakan singleton boleh meningkatkan prestasi pada tahap yang besar, jadi skop Beans in Spring juga ialah mod singleton secara lalai.

@Component
public class Users {

    @Bean
    public User user1(){
        User user = new User();
        user.setId(1);
        user.setName("Java");
        return user;
    }
}
@Component
public class Bean1 {

    @Autowired
    private User user;
    public User getUser(){
        System.out.println("Bean1对象未修改name之前 : "+user);
        user.setName("C++");
        return user;
    }
}
@Component
public class Bean2 {
    @Autowired
    private User user;

    public User getUser(){
        return user;
    }
}

1.2 Mengapa menggunakan mod tunggal sebagai skop lalai

  • Hanya buat satu salinan sumber yang sama untuk menjimatkan ruang

  • Tidak perlu mencipta dan memusnahkan objek terlalu banyak, dan kelajuan pelaksanaan dipertingkatkan

1.3 Skop

Skop, secara amnya difahami sebagai: mengehadkan skop yang tersedia bagi pembolehubah dalam atur cara dipanggil ⽤ Skop, atau kawasan tertentu dalam kod sumber tempat pembolehubah ditakrifkan dipanggil skop. Skop
Bea merujuk kepada corak tingkah laku tertentu Bean dalam keseluruhan rangka kerja Spring Contohnya, singleton skop tunggal bermaksud
bermaksud Bean Hanya ada satu salinan. dalam keseluruhan Spring, dan ia dikongsi secara global Jadi apabila orang lain mengubah suai nilai ini, apa yang
orang lain baca ialah nilai yang diubah suai.

Dalam Musim Bunga, skop sebiji kacang dipanggil model tingkah laku, kerana pada pandangan Spring, model tunggal ialah tingkah laku, yang bermaksud bahawa hanya boleh ada satu biji dalam keseluruhan Musim Bunga .

1.4 6 skop Bean

  • singleton: Skop kes tunggal

  • prototaip: Skop prototaip (skop berbilang contoh)

  • permintaan: Skop permintaan

  • sesi: skop sesi

  • aplikasi: skop global

  • soket web: Skop HTTP WebSocket

Empat terakhir terhad kepada SpringMVC, jadi pada peringkat ini kita hanya mempelajari dua yang pertama sahaja.

1.5 Menetapkan skop

Berbalik kepada kes tadi, Bean2 berharap objek kacang yang diperolehi belum diubah suai, jadi kita boleh mengubah suai mod tunggal kepada mod berbilang contoh.

使用@Scope(ConfigurableBeanFactory.SCOPE_PROTOTYPE)

Apakah skop dan kitaran hayat Bean dalam Java Spring

Apakah skop dan kitaran hayat Bean dalam Java Spring

使用@Scope("prototype")

Apakah skop dan kitaran hayat Bean dalam Java Spring

2. Proses pelaksanaan Spring dan kitaran hayat Bean

Apakah skop dan kitaran hayat Bean dalam Java Spring

ps: Apabila pelaksanaan mencapai langkah memasang sifat Bean, apabila suntikan atribut diimbas, Suntikan kelas akan dihentikan dahulu, dan suntikan atribut akan diberikan dahulu, kerana kaedah kemudian mungkin menggunakan atribut ini.

2.1 Kitaran hidup kacang

Apa yang dipanggil kitaran hayat merujuk kepada keseluruhan proses hidup objek dari lahir hingga kemusnahan Kita panggil proses ini kitaran hidup objek.

Kitaran hidup Kacang dibahagikan kepada lima bahagian berikut:

  • 1 )

  • 2. Sifat tetapan (Suntikan dan pemasangan kacang)

  • 3. Inisialisasi kacang

melaksanakan pelbagai kaedah pemberitahuan Aware, seperti kaedah antara muka BeanNameAware, BeanFactoryAware dan ApplicationContextAware Contohnya, apabila Spring memulakan kacang, ia perlu menetapkan id (nama) kepada kacang. Jika beanName berjaya ditetapkan, pemberitahuan beadNameAware akan dihasilkan; operasi; laksanakan init yang ditentukan sendiri kaedah -kaedah (jika dinyatakan) ialah kaedah yang dinyatakan dalam tag kacang dalam Spring; dimulakan dengan anotasi Produk era, init ialah produk era xml dan @PostConstruct ialah produk era anotasi. Keutamaan: Apabila kaedah En. Liang wujud pada masa yang sama, anotasi akan dilaksanakan terlebih dahulu, dan kemudian init akan dilaksanakan untuk melaksanakan kaedah pasca permulaan BeanPostProcessor (jika kaedah ini tidak ditindih, ikut kod sumber).

Apakah skop dan kitaran hayat Bean dalam Java Spring

4. Gunakan Bean
  • 5 Destroy Bean pelbagai kaedah untuk memusnahkan bekas, seperti @PreDestroy, kaedah antara muka DisposableBean, musnah-. kaedah .

@PreDestroy和destroy-method的关系和初始化方法的两个关系差不多
优先级:@ProDestroy > 重写的DisposableBean接口方法 > destroy-method

执行流程图如下:

Apakah skop dan kitaran hayat Bean dalam Java Spring

ps:实例化和初始化的区别:实例化就是 分配内存空间。初始化,就是把我们一些参数,方法的具体实现逻辑给加载进去。

2.1.1生命周期演示

Apakah skop dan kitaran hayat Bean dalam Java Spring

Apakah skop dan kitaran hayat Bean dalam Java Spring

xml配置如下:

Apakah skop dan kitaran hayat Bean dalam Java Spring

Bean

public class BeanLifeComponent implements BeanNameAware {
    @PostConstruct
    public void PostConstruct(){
        System.out.println("执行@PostConstruct");
    }
    public void init(){
        System.out.println("执行bean-init-method");
    }
    public void use(){
        System.out.println("正在使用bean");
    }
    @PreDestroy
    public void PreDestroy(){
        System.out.println("执行@PreDestroy");
    }
    public void setBeanName(String s){
        System.out.println("执行了Aware通知");
    }
}

启动类

public class App2 {
    public static void main(String[] args) {
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
        BeanLifeComponent beanLifeComponent = context.getBean(BeanLifeComponent.class);
        beanLifeComponent.use();
        context.destroy();
    }
}

xml配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:content="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
    <content:component-scan base-package="com.beans"></content:component-scan>
    <bean id="1" class="com.beans.BeanLifeComponent" init-method="init"></bean>
</beans>
2.1.2 为什么要先设置属性,在进行初始化
@Controller
public class TestUser {
    @Autowired
    private Test test;

    public TestUser(){
        test.sayHi();
        System.out.println("TestUser->调用构造方法");
    }
}

如果这段代码先执行了初始化,也就是其构造方法,会用到test对象,此时还没有设置属性,test就为null,会造成空指针异常。因此必须先设置属性,在进行初始化。

Atas ialah kandungan terperinci Apakah skop dan kitaran hayat Bean dalam Java Spring. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:yisu.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam