Cynicism Cynicism
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Cynicism

Java后端学习中的IKUN
首页
  • 前端学习笔记

    • 《Vue》笔记
    • 《TypeScript 从零实现 axios》
    • TypeScript
    • JS设计模式总结
    • 小程序笔记
  • 后端学习笔记

    • 《JavaWeb》
    • 《SSM》
    • 《瑞吉外卖》
    • 《Git》
    • 《SpringCloud》
    • 《黑马点评》
    • 《Spring原理》
    • 《JVM》
    • 《Java并发编程》
    • 《学成在线》
  • HTML
  • CSS
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 面试
  • 常见问题
  • 实用技巧
  • 友情链接
实习
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Spring简介
  • Bean的管理开发
    • 1. IOC/DI配置管理第三方bean
      • 1.1 第三方Bean的依赖导入
      • 1.2 第三方Bean的属性配置
    • 2. 核心容器
      • 2.1 容器创建
      • 2.2 Bean获取
      • 2.3 BeanFactory的使用
    • 3. IOC/DI注解开发
      • 3.1 注解开发定义bean
      • 3.2 纯注解开发模式
      • 3.3 注解开发bean作用范围与生命周期管理
      • 3.4 注解开发依赖注入
    • 4. 注解开发总结
  • SpringMVC简介
  • MyBatisPlus基础
  • MyBatisPlus进阶
  • 《SSM》笔记
cynicism
2023-04-19
目录

Bean的管理开发

# 1. IOC/DI配置管理第三方bean

# 1.1 第三方Bean的依赖导入

pom.xml中添加依赖

<dependency>
    <groupId>c3p0</groupId>
    <artifactId>c3p0</artifactId>
    <version>0.9.1.2</version>
</dependency>
1
2
3
4
5

对于新的技术,不知道具体的坐标该如何查找?

  • 直接百度搜索
  • 从mvn的仓库https://mvnrepository.com/中进行搜索

配置属性时可以将所需的属性写在外部的properties文件中,然后导入即可

# 1.2 第三方Bean的属性配置

  • resources下创建一个jdbc.properties文件,并添加对应的属性键值对
  • 在applicationContext.xml中开context命名空间
    <?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:context="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
                http://www.springframework.org/schema/context/spring-context.xsd">
    </beans>	
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
  • 在配置文件中使用context命名空间下的标签来加载properties配置文件
    <context:property-placeholder location="URL" system-properties-mode="NEVER"/>
1

context标签中system-properties-mode:设置为NEVER,表示不加载系统属性

  • 使用${key}来读取properties配置文件中的内容并完成属性注入

# 2. 核心容器

这里所说的核心容器,大家可以把它简单的理解为ApplicationContext

# 2.1 容器创建

① 类路径下的XML配置文件

ApplicationContext ctx = new FileSystemXmlApplicationContext("applicationContext.xml");
1

② 文件系统下的XML配置文件(不推荐)

ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml"); 
1

# 2.2 Bean获取

① (类名) 容器对象.getBean("bean的ID")
② 容器对象.getBean("bean的ID",bean的ID.class) ③ 容器对象.getBean(bean的ID.class)

方法一需要进行类型强制转换

# 2.3 BeanFactory的使用

BeanFactory是容器的最上级父接口

  • 创建容器(了解)
public class AppForBeanFactory {
    public static void main(String[] args) {
        Resource resources = new ClassPathResource("applicationContext.xml");
        BeanFactory bf = new XmlBeanFactory(resources);
        BookDao bookDao = bf.getBean(BookDao.class);
        bookDao.save();
    }
}
1
2
3
4
5
6
7
8

注意:

  • BeanFactory是延迟加载,只有在获取bean对象的时候才会去创建
  • ApplicationContext是立即加载,容器加载的时候就会创建bean对象

# 3. IOC/DI注解开发

# 3.1 注解开发定义bean

① 类上添加@Component注解

@Component注解如果不起名称,会有一个默认值就是当前类名首字母小写 @Component注解不可以添加在接口上,因为接口是无法创建对象的 衍生注解@Controller、@Service、@Repository

XML与注解配置的对应关系:
② 配置Spring的注解包扫描

<?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.xsd">
    <context:component-scan base-package="com.itheima"/>
</beans>
1
2
3
4
5
6
7

注:base-package指定Spring框架扫描的包路径,它会扫描指定包及其子包中的所有类上的注解

# 3.2 纯注解开发模式

Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道

  • 创建一个配置类 在配置类上添加@Configuration注解,将其标识为一个配置类,替换applicationContext.xml
@Configuration
public class SpringConfig {
}
1
2
3
  • 用注解替换包扫描配置 在配置类上添加包扫描注解@ComponentScan替换<context:component-scan base-package=""/>
@Configuration
@ComponentScan("com.itheima")
public class SpringConfig {
}
1
2
3
4
  • 加载配置类初始化容器
  //加载配置文件初始化容器
  ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
  //加载配置类初始化容器
  ApplicationContext ctx = new AnnotationConfigApplicationContext(SpringConfig.class);
1
2
3
4

# 3.3 注解开发bean作用范围与生命周期管理

  • 使用@Scope("prototype")设置bean的作用范围
  • 在方法上添加@PostConstruct和@PreDestroy注解实现初始化和销毁方法
@Repository
@Scope("prototype")
public class BookDaoImpl implements BookDao {
    @PostConstruct //在构造方法之后执行,替换 init-method
    public void init() {
        System.out.println("init ...");
    }
    @PreDestroy //在销毁方法之前执行,替换 destroy-method
    public void destroy() {
        System.out.println("destroy ...");
    }
}
1
2
3
4
5
6
7
8
9
10
11
12

# 3.4 注解开发依赖注入

Spring为了使用注解简化开发,并没有提供构造函数注入、setter注入对应的注解,只提供了自动装配的注解实现 @Autowired实现属性注入

① 引用数据类型注入:

  • @Autowired默认按照类型自动装配,如果IOC容器中同类的Bean找到多个,就按照变量名和Bean的名称匹配
  • 按照名称自动装配:可以使用@Qualifier来指定注入哪个名称的bean对象

② 简单数据类型注入:

  • 使用@Value注解,将值写入注解的参数中就行了,实现基本数据类型或者字符串注入
  • @Value一般会被用在从properties配置文件中读取内容进行使用

注意:

  • @Autowired可以写在属性上,也可也写在setter方法上,最简单的处理方式是写在属性上并将setter方法删除掉
  • 为什么setter方法可以删除呢?
    • 自动装配基于反射设计创建对象并通过暴力反射为私有属性进行设值
    • 普通反射只能获取public修饰的内容
    • 暴力反射除了获取public修饰的内容还可以获取private修改的内容
    • 所以此处无需提供setter方法

# 4. 注解开发总结

编辑 (opens new window)
#spring#bean
上次更新: 2025/05/12, 04:51:03
Spring简介
SpringMVC简介

← Spring简介 SpringMVC简介→

最近更新
01
JVM调优
06-03
02
Linux篇
03-30
03
Kafka篇
03-30
更多文章>
Theme by Vdoing | Copyright © 2023-2025 Cynicism | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式