
目录
定义bean
衍生注解
纯注解开发模式:
bean的作用范围:
bean的生命周期:
使用注解方式的依赖注入:
第三方bean管理:
第三方简单类型依赖注入:
第三方引用类型依赖注入;
XML配置对比注解配置
1. 没有整合前的状态
2. Spring 整合 MyBatis 的过程
第一步:建立连接通道
第二步:菜单标准化
第三步:自动接单系统
3. 完整的点餐流程
顾客点餐(Service 层)
后厨做菜(MyBatis 执行)
4. 关键角色解释
SqlSessionFactoryBean
使用@Component定义bean @Component("bookDao") public class BookDaoImpl implements BookDao { @Componentpublic class BookServiceImpl implements BookService { 核心配置文件中通过组件扫描加载bean <context:component-scan base-package="com.itheima"/>
Spring提供@Component注解的三个衍生注解
@Controller:用于表现层bean定义
@Service:用于业务层bean定义 @Repository:用于数据层bean定义
Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道Java类代替Spring核心配置文件。
@Configuration注解用于设定当前类为配置类 @Componentscan注解用于设定扫描路径,此注解只能添加一次,多个数据请用数组格式

Spring3.0开启了纯注解开发模式,使用Java类替代配置文件,开启了Spring快速开发赛道读取Spring核心配置文件初始化容器对象切换为读取Java配置类初始化容器对象

使用@Scope定义bean的作用范围
@postConstruct@PreDestroy定义bean的生命周期。
使用@Autowired注解开启自动装配模式(按类型)
注意:自动装配基于反射设计创建对象并暴力反射对应属性为私有属性初始化数据,因此无需提供setter方法
注意:自动装配建议使用无参构造方法创建对象(默认),如果不提供对应构造方法,请提供唯一的构造方法
使用@Qualifier注解开启指定名称装配bean
使用@Value实现简单类型注入
使用@PropertySource注解加载properties文件

注意:路径仅支持单一文件配置,多文件请使用数组格式配置,不允许使用通配符*
使用@Bean配置第三方bean
使用独立的配置类管理第三方bean

然后将独立的配置类加入到核心配置(推荐使用导入式)

使用@Import注解手动加入配置类到核心配置,此注解只能添加一次,多个数据请用数组格式


引用类型注入只需要为bean定义方法设置形参即可,容器会根据类型自动装配对象

Spring整合Mybatis:
前言:
Spring 就像餐厅的 智能管理系统:
MyBatis 就像 标准化后厨:
MyBatis-Spring 就是连接两者的 智能传菜系统:
这样整合后,餐厅(应用)运营效率大大提高,顾客(开发者)只需要愉快地点餐(调用 Service),不用操心后厨的复杂流程,下面我们通过这个形象的比喻来介绍整合的流程。
想象两个独立的部门:
// 相当于在前后厨之间安装了传菜电梯
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) {
// 这个工厂就是那个电梯控制系统
SqlSessionFactoryBean factory = new SqlSessionFactoryBean();
factory.setDataSource(dataSource); // 连接食材仓库
return factory.getObject();xml
<!-- 后厨的菜谱 -->
<!-- mapper/UserMapper.xml -->
<mapper namespace="com.example.mapper.UserMapper">
<!-- 每道菜的标准做法 -->
<select id="selectUser" resultType="User">
SELECT * FROM users WHERE id = #{id}
</select>
</mapper>java
// 自动接单机器人
@MapperScan("com.example.mapper")
// 这个注解相当于:
// "扫描所有厨师(Mapper),给他们每人配一个对讲机"
// 客人点"鱼香肉丝",系统自动呼叫擅长这道菜的厨师java
@Service
public class UserService {
// 顾客说:"我要一份用户查询套餐"
@Autowired // 服务员自动过来接单
private UserMapper userMapper; // 对讲机
public User getUser(int id) {
// 服务员按下对讲机:"3号桌,用户查询,id=1"
return userMapper.selectUser(id);
// 后厨收到指令开始做菜...
}
}text
1. 对讲机收到订单 → Mapper 接口方法被调用
2. 查菜谱找做法 → 查找对应的 SQL 映射
3. 从冰箱取食材 → DataSource 获取数据库连接
4. 按标准流程做菜 → 执行 SQL
5. 装盘上菜 → 将 ResultSet 映射成 Java 对象
6. 传菜电梯送出 → 返回结果传菜电梯的总控室