Spring 核心知识点全解析(续)

2.4 Spring 工厂类对比

工厂类 特点 适用场景
ApplicationContext(ClassPathXmlApplicationContext) 加载配置文件时立即创建所有单例对象 绝大部分业务场景(非懒加载)
BeanFactory(XmlBeanFactory) 获取对象时才创建(懒加载) 资源敏感场景(如移动端)

2.5 Bean 的作用域

通过scope属性控制 Bean 的实例范围:

作用域 说明
singleton(默认) 单例,Spring 容器中仅存在一个实例 Service、DAO、工厂类
prototype 多例,每次获取创建新实例 Connection、SqlSession
request Web 环境,存入 request 域 Web 层单次请求
session Web 环境,存入 session 域 用户会话周期
application Web 环境,存入 ServletContext 域 应用全局

2.6 Bean 的生命周期

单例 Bean(scope="singleton")

容器启动 → 构造方法(实例化)→ Set 方法(注入)→ init 方法(初始化)→ 容器关闭 → destroy 方法(销毁)

多例 Bean(scope="prototype")

获取对象 → 构造方法(实例化)→ Set 方法(注入)→ init 方法(初始化)→ JVM 垃圾回收 → destroy 方法(销毁)

三、基于注解的 IOC 配置

注解配置与 XML 配置功能一致,更简洁高效,核心步骤如下:

3.1 环境准备

步骤 1 :引入 Spring Context 依赖(同 XML 配置);步骤 2:配置文件开启注解扫描

XML 复制代码
<?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">

    <!-- 扫描指定包下的注解 -->
    <context:component-scan base-package="com.hg"></context:component-scan>
</beans>

3.2 核心注解

3.2.1 创建对象的注解(替代<bean>标签)
注解 作用 适用层
@Component 通用注解,将类交给 Spring 管理 任意层
@Controller 语义化 @Component 表现层(Controller)
@Service 语义化 @Component 业务层(Service)
@Repository 语义化 @Component 持久层(DAO)
@Scope 指定作用域,如 @Scope ("prototype") 任意 Bean

示例

java 复制代码
// DAO层
@Repository // 默认id为userDaoImpl,可指定@Repository("userDao")
public class UserDaoImpl implements UserDao {
    @Override
    public void addUser(){
        System.out.println("insert into tb_user......");
    }
}

// Service层
@Service // 默认id为userServiceImpl
public class UserServiceImpl implements UserService {
    // 注入依赖
    @Autowired // 按类型自动注入
    private UserDao userDao;
    
    @Override
    public void addUser(){
        userDao.addUser();
    }
}
3.2.2 注入属性的注解(替代<property>标签)
注解 作用
@Autowired 按类型自动注入,可省略 Set 方法
@Resource 按名称注入(@Resource (name="userDaoImpl"))
@Value 注入基本类型 / String,支持读取配置文件(@Value ("${name}"))

读取配置文件示例

java 复制代码
# config.properties
name=张三
age=18
XML 复制代码
<!-- 加载配置文件 -->
<context:property-placeholder location="config.properties"/>
java 复制代码
@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserDao userDao;
    @Value("${name}")
    private String name;
    @Value("${age}")
    private Integer age;
    
    @Override
    public void addUser(){
        System.out.println(name + "," + age);
        userDao.addUser();
    }
}

未完待续~~~

相关推荐
Csvn3 小时前
📊 SQL 入门 Day 8:集合操作 — 用 SQL 做数学里的"并交差"
后端·sql
腻害兔3 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:字典、短信、邮件、通知——后台系统的“基础设施四件套“!
java·前端·vue.js·产品经理·ai编程
碎光拾影4 小时前
ARM交叉工具链各工具作用及IMX6ULL平台LED+蜂鸣器裸机程序实现
java·开发语言·数据库
Miao121315 小时前
微服务 API 测试实践:海外某民宿平台如何构建模式驱动测试基础设施
java·开发语言
腻害兔5 小时前
【若依项目-产品经理视角】RuoYi-Vue-Pro 源码拆解:支付模块 yudao-module-pay,一个让产品经理都看懂的支付中台设计
java·前端·vue.js·产品经理·ai编程
码事漫谈5 小时前
告别数据孤岛与AI“水土不服”:金仓多模融合时序库如何让数据真正服务于业务
后端
IT_陈寒5 小时前
Redis的持久化配置把我坑惨了:你以为数据安全了?
前端·人工智能·后端
星栈5 小时前
Node 接口该写同步还是异步?
后端·node.js
红烧大青虫6 小时前
HarmonyOS应用开发实战:小事记 - UIAbility 的冷启动/热启动/后台启动三种场景与 launchParam 解析
后端·华为·harmonyos·鸿蒙系统
码事漫谈6 小时前
AI Token 缓存:命中省 10 倍,不命中白扔钱
后端