当前位置: 首页 > article >正文

Spring:纯注解开发模式-Ioc对bean的管理

我们知道(请见 注解开发定义bean),可以使用注解来配置bean,但是依然有用到配置文件,在配置文件中对包进行了扫描,Spring在3.0版已经支持纯注解开发

  • Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道
  • 实现思路为:
    将配置文件applicationContext.xml删除掉,使用类来替换。

1,pom.xml配置依赖坐标

需求增加javax.annotation-api依赖,因为Bean的生命周期中的两个注解@PostConstruct@PreDestroy注解从JDK9以后jdk中的javax.annotation包被移除了,这两个注解刚好就在这个包中。

<dependencies>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>6.1.14</version>
    </dependency>
      <dependency>
          <groupId>javax.annotation</groupId>
          <artifactId>javax.annotation-api</artifactId>
          <version>1.2</version>
      </dependency>
  </dependencies>

2,添加一个配置类SpringConfig

在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml
在配置类上添加包扫描注解@ComponentScan替换<context:component-scan base-package=""/>

@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}

3, 添加BookDao、BookDaoImpl类

  • @Scope设置bean的作用范围
    @Scope(“singleton”)
  • @PostConstruct、 @PreDestroy为生命周期方法注解
  public interface BookDao {
      public void save();
  }

@Repository
//@Scope设置bean的作用范围
//@Scope("prototype")
@Scope("singleton")
public class BookDaoImpl implements BookDao {

    public void save() {
        System.out.println("book dao save ...");
    }
    //@PostConstruct设置bean的初始化方法
    @PostConstruct
    public void init() {
        System.out.println("init ...");
    }
    //@PreDestroy设置bean的销毁方法
    @PreDestroy
    public void destroy() {
        System.out.println("destroy ...");
    }

}

4, 创建运行类App

public class App {
  public static void main(String[] args) {
      AnnotationConfigApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
      BookDao bookDao1 = ctx.getBean(BookDao.class);
      BookDao bookDao2 = ctx.getBean(BookDao.class);
      System.out.println(bookDao1);
      System.out.println(bookDao2);
      ctx.close();
  }
}

5, 运行结果

在这里插入图片描述

小结

  • Java类替换Spring核心配置文件
    在这里插入图片描述

  • @Configuration注解用于设定当前类为配置类

  • @ComponentScan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

    @ComponentScan({com.itheima.service","com.itheima.dao"})
    
  • 读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

    //加载配置文件初始化容器
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
    //加载配置类初始化容器
    ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
    
  • 要想将BookDaoImpl变成非单例,只需要在其类上添加@scope注解

  • bean生命周期管理

    • 在BookDaoImpl中添加两个方法,initdestroy,方法名可以任意
    • 只需要在对应的方法上添加@PostConstruct@PreDestroy注解即可。
    • 需要注意的是destroy只有在容器关闭的时候,才会执行
知识点1:@Configuration
名称@Configuration
类型类注解
位置类定义上方
作用设置该类为spring配置类
属性value(默认):定义bean的id
知识点2:@ComponentScan
名称@ComponentScan
类型类注解
位置类定义上方
作用设置spring配置类扫描路径,用于加载使用注解格式定义的bean
属性value(默认):扫描路径,此路径可以逐层向下扫描
知识点3:@Scope
名称@Scope
类型类注解
位置类定义上方
作用设置该类创建对象的作用范围
可用于设置创建出的bean是否为单例对象
属性value(默认):定义bean作用范围,
默认值singleton(单例),可选值prototype(非单例)
知识点4:@PostConstruct
名称@PostConstruct
类型方法注解
位置方法上
作用设置该方法为初始化方法
属性
知识点5:@PreDestroy
名称@PreDestroy
类型方法注解
位置方法上
作用设置该方法为销毁方法
属性

最后的总结

在这里插入图片描述

[说明]:内容主要来源黑马程序员网上资源学习


http://www.kler.cn/a/398293.html

相关文章:

  • 风电电力系统低碳调度论文阅读第一期
  • Python爬虫项目 | 一、网易云音乐热歌榜歌曲
  • 通过JS删除当前域名中的全部COOKIE教程
  • 不用来回切换,一个界面管理多个微信
  • java 数组 拼接 详解
  • 类和对象——拷贝构造函数,赋值运算符重载(C++)
  • 聊天服务器(8)用户登录业务
  • Java项目实战II基于微信小程序的课堂助手(开发文档+数据库+源码)
  • RK3588开发板Android12-SDK更新通知
  • halcon3d disparity_image_to_xyz非常重要的算子及使用条件
  • 平均值(水题???)
  • STM32——外部中断
  • 【C语言】连接陷阱探秘(2):命令冲突与static修饰符
  • 【Python系列】Python中打印详细堆栈信息的技巧
  • Synchronized原理
  • K8S单节点部署及集群部署
  • PyTorch 张量的常用 API
  • Guava Cache
  • SQLI LABS | Less-51 GET-Error Based-ORDER BY CLAUSE-String-Stacked Injectiion
  • 图像分割——Hough变换检测法
  • C语言——判断是不是字母
  • YOLOv7-0.1部分代码阅读笔记-train.py
  • SQLite 安装指南
  • MAC上的Office三件套报53错误解决方案(随笔记)
  • 【MogDB】MogDB5.2.0重磅发布第八篇-支持PLSQL编译全局缓存
  • 如何在 Ubuntu 上安装 Mattermost 团队协作工具