【Java开发】Java热门框架深入开发第3篇:二、Spring容器,三、Spring注解开发【附代码文档】

67 阅读1分钟

🏆🏆🏆教程全知识点简介:学习目标 一、Spring简介 2 初识Spring 3 Spring体系结构 二、IOC和DI入门案例【重点】 五、Bean的生命周期【了解】 问题导入 1 生命周期相关概念介绍 2 代码演示 3 Bean销毁时机 六、依赖注入(DI配置) 1 依赖注入方式【重点】 2 依赖自动装配【理解】 3 集合注入 今日目标 一、第三方资源配置管理 1 管理DataSource连接池对象 2 加载properties属性文件【重点】 四、Spring整合其他技术【重点】 二、AOP案例 1 案例-测量业务层接口万次执行效率 2 AOP切入点数据获取 2 Spring事务角色【理解】 二、请求与响应 1 请求映射路径【重点】 2 请求参数 3 日期类型参数传递【重点】 4 响应 三、REST风格 1 REST简介 2 RESTful入门案例 3 REST快速开发【重点】 今日内容 一、SSM整合【重点】 1 SSM整合配置 三、异常处理器【理解】 1 异常介绍 2 异常处理器 一、分模块开发与设计 1. 分模块开发的意义 模块拆分原则 2. 分模块开发(模块拆分) 二、依赖管理 1. 依赖传递 2. 可选依赖 4 可选依赖和排除依赖的区别 三、聚合与继承 1. 聚合工程 3. 继承关系 5. 聚合与继承的区别 四、属性管理 1. 属性 2. 版本管理 五、多环境配置与应用 1. 多环境配置作用 2. 跳过测试(了解) 六、私服 2. 私服仓库分类 3. 资源上传与下载 附件1:POM文件总体配置说明 一、MyBatisPlus简介 1. 入门案例 二、标准数据层开发 2. Lombok插件介绍 四、DML编程控制 1. id生成策略控制(Insert) 2. 多记录操作(批量Delete/Select) 3. 逻辑删除(Delete/Update) 4. 乐观锁(Update)


📚📚👉👉👉本站这篇博客:   juejin.cn/post/754390…    中查看

📚📚👉👉👉本站这篇博客:   juejin.cn/post/754390…    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

二、Spring容器

1 Spring核心容器介绍

问题导入

问题:按照Bean名称获取Bean有什么弊端,按照Bean类型获取Bean有什么弊端?

1.1 创建容器
  • 方式一:类路径加载配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  • 方式二:文件路径加载配置文件
ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\applicationContext.xml");
  • 加载多个配置文件
ApplicationContext ctx = new ClassPathXmlApplicationContext("bean1.xml", "bean2.xml");

Javatpoint 教程

1.2 获取bean对象
  • 方式一:使用bean名称获取

弊端:需要自己强制类型转换

BookDao bookDao = (BookDao) ctx.getBean("bookDao");
  • ==方式二:使用bean名称获取并指定类型==

弊端:推荐使用

BookDao bookDao = ctx.getBean("bookDao", BookDao.class);
  • 方式三:使用bean类型获取

弊端:如果IOC容器中同类型的Bean对象有多个,此处获取会报错

BookDao bookDao = ctx.getBean(BookDao.class);
1.3 容器类层次结构

1.4 BeanFactory
  • 类路径加载配置文件
Resource resources = new ClassPathResource("applicationContext.xml");
BeanFactory bf = new XmlBeanFactory(resources);
BookDao bookDao = bf.getBean("bookDao", BookDao.class);
bookDao.save();
  • BeanFactory创建完毕后,所有的Bean均为延迟加载,也就是说 调用getBean()方法获取Bean对象时才创建Bean对象并返回给

2 Spring核心容器总结

2.1 容器相关
  • BeanFactory是IoC容器的顶层接口,初始化BeanFactory对象时,加载的bean延迟加载
  • ApplicationContext接口是Spring容器的核心接口,初始化时bean立即加载
  • ApplicationContext接口提供基础的bean操作相关方法,通过其他接口扩展其功能
  • ApplicationContext接口常用初始化类
    • ==ClassPathXmlApplicationContext(常用)==
    • FileSystemXmlApplicationContext
2.2 bean相关

2.3 依赖注入相关

三、Spring注解开发

1 注解开发定义Bean对象【重点】

目的:xml配置Bean对象有些繁琐,使用注解简化Bean对象的定义

问题导入

问题1:使用什么标签进行Spring注解包扫描?

问题2:@Component注解和@Controller、@Service、@Repository三个衍生注解有什么区别?

1.1 基本使用

【第一步】在applicationContext.xml中开启Spring注解包扫描

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       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.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
	 <!--扫描com.itheima包及其子包下的类中注解-->
    <context:component-scan base-package="com.itheima"/>
</beans>

Apache Commons Collections

【第二步】在类上使用@Component注解定义Bean。

//@Component定义bean
@Component("bookDao")
public class BookDaoImpl implements BookDao {
    public void save() {
        System.out.println("book dao save ...");
    }
}
@Component
public class BookServiceImpl implements BookService {
    private BookDao bookDao;

    public void setBookDao(BookDao bookDao) {
        this.bookDao = bookDao;
    }

    public void save() {
        System.out.println("book service save ...");
        bookDao.save();
    }
}

补充说明:如果@Component注解没有使用参数指定Bean的名称,那么类名首字母小写就是Bean在IOC容器中的默认名称。例如:BookServiceImpl对象在IOC容器中的名称是bookServiceImpl。

【第三步】在测试类中获取Bean对象

public class AppForAnnotation {
    public static void main(String[] args) {
        ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        BookDao bookDao = (BookDao) ctx.getBean("bookDao");
        System.out.println(bookDao);
        //按类型获取bean
        BookService bookService = ctx.getBean(BookService.class);
        System.out.println(bookService);
    }
}

注意:在测试类中不要调用bookService的save方法,因为还没有给BookServiceImpl中的bookDao赋值,调用bookService的save方法会出现空指针异常。

运行结果

Vaadin 文档

1.2 @Component三个衍生注解

说明:加粗的注解为常用注解

  • Spring提供**@Component**注解的三个衍生注解
    • @Controller:用于表现层bean定义
    • @Service:用于业务层bean定义
    • @Repository:用于数据层bean定义
@Repository("bookDao")
public class BookDaoImpl implements BookDao {
}

@Service
public class Book