Spring注解开发-02-Bean的作用范围和生命周期

一、@Scope

1、@Scope注解是springIoc容器中的一个作用域

2、Spring IoC 容器中具有以下几种作用域:基本作用域singleton(单例)prototype(多例),Web 作用域(reqeust、session、globalsession),自定义作用域

常用的是:singleton(单例)、prototype(多例)

3、使用默认的@Scope

package com.gg.dao.impl;

import com.gg.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

/**
 * @Author: {LZG}
 * @ClassName: BookDaoImpl
 * @Description: TODO
 * @Date: 2022/4/25 18:19
 **/
@Repository("bookDao")
@Scope
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("book dao save");
    }
}

测试

package com.gg;

import com.gg.config.SpringConfig;
import com.gg.dao.BookDao;
import com.gg.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @Author: {LZG}
 * @ClassName: App
 * @Description: TODO
 * @Date: 2022/4/25 18:18
 **/
public class App2 {
    public static void main(String[] args) {
        ApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        //  使用id获取
        BookDao bookDao = (BookDao) context.getBean("bookDao");
        BookDao bookDao2 = (BookDao) context.getBean("bookDao");
        System.out.println(bookDao);
        System.out.println(bookDao2);
    }
}

 测试结果

 4、使用prototype(多例)

给@Scope设置作用域

 测试结果

 二、Bean的生命周期

@PostConstruct:这个注解是由Java提供的,它用来修饰一个非静态的void方法。它会在服务器加载Servlet的时候运行,并且只运行一次。

@PreDestroy:@PreDestroy修饰的方法会在服务器卸载Servlet的时候运行,并且只会被服务器调用一次,类似于Servlet的destroy()方法。被@PreDestroy修饰的方法会在destroy()方法之后运行,在Servlet被彻底卸载之前。执行顺序如下所示。

package com.gg.dao.impl;

import com.gg.dao.BookDao;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Repository;

import javax.annotation.PostConstruct;
import javax.annotation.PreDestroy;

/**
 * @Author: {LZG}
 * @ClassName: BookDaoImpl
 * @Description: TODO
 * @Date: 2022/4/25 18:19
 **/
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
    @Override
    public void save() {
        System.out.println("book dao save");
    }

    @PostConstruct
    void init(){
        System.out.println("初始化.....");
    }
    @PreDestroy
    void destroy(){
        System.out.println("销毁");
    }
}
package com.gg;

import com.gg.config.SpringConfig;
import com.gg.dao.BookDao;
import com.gg.service.BookService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.AnnotationConfigApplicationContext;

/**
 * @Author: {LZG}
 * @ClassName: App
 * @Description: TODO
 * @Date: 2022/4/25 18:18
 **/
public class App2 {
    public static void main(String[] args) {
        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
        //  使用id获取
        BookDao bookDao = (BookDao) context.getBean("bookDao");
        System.out.println(bookDao);
        context.close();
    }
}

执行结果

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值