Spring学习总结-02(基于黑马程序员视频及资料)

本文介绍了Spring中如何配置管理第三方bean,以Druid数据源为例,展示了导入依赖、配置bean以及从properties文件加载配置的过程。接着,讨论了Spring核心容器的创建方式和获取bean的方法。文章还提到了通过注解进行bean定义和生命周期管理,包括作用范围、初始化和销毁方法。最后,探讨了注解开发如何管理第三方bean,包括引入外部配置类和使用@Import注解。
摘要由CSDN通过智能技术生成

Spring学习总结-02

1. 配置管理第三方bean

1.1 以配置druid作案例

  • 使用第三方技术需要导入依赖

在pom.xml文件中导入druid坐标

<dependency>
	<groupId>com.alibaba</groupId>
	<artifactId>druid</artifactId>
	<version>1.2.16</version>
</dependency>	
  • 修改配置文件
  • driverClassName:数据库驱动
  • url:数据库连接地址
  • username:数据库连接用户名
  • password:数据库连接密码
<bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
	<property name="driverClassName" value=""/>
	<property name="url" value=""/>
	<property name="username" value=""/>
	<property name="password" value=""/>
</bean>
  • 在主函数里获取连接池对象,运行
    在这里插入图片描述
    在这里插入图片描述

1.2 加载properties文件

  • 上述在spring配置文件中配置连接池信息不利于后期维护
  • 将连接四要素配置在外部properties文件中,让spring去读取
  • 新建properties文件,将连接四要素配置进去
    在这里插入图片描述
jdbc.driver=
jdbc.url=
jdbc.username=
jdbc.password=
  • 在applicationContext.xml中开启contexg命名空间
    在这里插入图片描述
  • 加载properties文件,location中可以配多个properties文件
<context:property-placeholder location="classpath:druidJdbc.properties"/>
  • 更改bean标签信息
 <bean id="druid" class="com.alibaba.druid.pool.DruidDataSource">
        <property name="driverClassName" value="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
</bean>
  • 至此,加载properties文件完成

2. 核心容器

2.1 容器创建方式

两种方式:

  • 通过ClassPathXmlApplicationContext创建(通过类路径)
  • 通过FileSystemXmlApplicationContext创建(通过文件系统路径)
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
ApplicationContext ctx = new FileSystemXmlApplicationContext("D:\\workspace\\spring\\spring_10_container\\src\\main\\resources\\applicationContext.xml"); 

2.2 获取bean的方式

使用getBean的三种方式:

  • 只用一个参数为bean的id,得到的是Object类型,需要强转
  • 只用一个参数为bean的类型,不需要强转,但必须保证bean唯一
  • 用两个参数,参数一为bean的id,参数二为bean的类型,不需要强转
BookDao bookDao = (BookDao) ctx.getBean("bookDao"); //方式一
BookDao bookDao = ctx.getBean(BookDao.class); //方式二
BookDao bookDao = ctx.getBean("bookDao"BookDao.class); //方式三

2.3 容器类的层次结构

  • 最上层的父接口为BeanFactory

2.4 BeanFactory

  • 使用BeanFactory创建的容器是延迟加载,即初始化容器对象时,加载的bean是延迟加载
  • 使用ApplicationContext创建的容器是立即加载,是Spring容器的核心接口

3. 核心容器总结

在这里插入图片描述
在这里插入图片描述

4. IOC/DI注解开发

4.1 注解开发定义bean

  • 在类上添加@Component(“”),括号里填bean的id

    在这里插入图片描述

  • 删除配置文件的bean标签,配置Spring的注解包扫描
    在这里插入图片描述
    base-package中类路径越短,扫描到的包越多,速度也就越慢

  • 在主函数获取bean并执行方法
    在这里插入图片描述

  • 如果在类上添加@Component不加名称
    在这里插入图片描述

  • 在主函数获取bean时按类型获取
    在这里插入图片描述

    @Component注解如果不起名称,会有一个默认值就是当前类名首字母小写,所以也可以按照名称获取

对于@Component注解,还衍生出了其他三个注解 @Controller@Service@Repository
方便我们后期在编写类的时候能很好的区分出这个类是属于 表现层业务层还是数据层的类

  • @Controller用于表现层,即controller层
  • @Service用于业务层,即service层
  • @Repository用于数据层,即dao层

4.2 纯注解开发

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

  • 创建config类代替配置文件
    在这里插入图片描述

  • 在配置类上添加@Configuration和@ComponentScan

    @Configuration:标识该类为配置类,替换applicationContext.xml文件
    @ComponentScan:扫描包

    在这里插入图片描述

  • 主函数中更换获取容器的方式

    因为我们不再使用配置文件,所以通过加载xml配置文件获取容器的方法ClassPathXmlApplicationContext不再使用,更换为加载配置类的AnnotationConfigApplicationContext方法、

    在这里插入图片描述

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

4.3.1 bean作用范围
名称@Scope
类型类注解
位置类定义上方
作用设置该类创建对象的作用范围可用于
设置创建出的bean是否为单例对象
属性value(默认):定义bean作用范围,
默认值singleton(单例),可选值prototype(非单例)
4.3.2 Bean的生命周期
名称@PostConstruct
类型方法注解
位置方法上
作用设置该方法为初始化方法
属性
名称@PreDestroy
类型方法注解
位置方法上
作用设置该方法为销毁方法
属性

4.4 注解开发依赖注入

名称@Autowired
类型属性注解 或 方法注解(了解) 或 方法形参注解(了解)
位置属性定义上方 或 标准set方法上方 或 类set方法上方 或 方法形参前面
作用为引用类型属性设置值
属性required:true/false,定义该属性是否允许为null
名称@Qualifier
类型属性注解 或 方法注解(了解)
位置属性定义上方 或 标准set方法上方 或 类set方法上方
作用为引用类型属性指定注入的bean的Id
属性value(默认):设置注入的bean的Id
名称@Value
类型属性注解 或 方法注解(了解)
位置属性定义上方 或 标准set方法上方 或 类set方法上方
作用为 基本数据类型 或 字符串类型 属性设置值
属性value(默认):要注入的属性值
名称@PropertySource
类型类注解
位置类定义上方
作用加载properties文件中的属性值
属性value(默认):设置加载的properties文件对应的文件名或文件名组成的数组

5. IOC/DI注解开发管理第三方bean

5.1 引入外部配置类

5.1.1 使用包扫描引入
  • 新建一个JdbcConfig配置类,在类上添加@Configuration,定义一个方法获取要管理的对象,并在方法上添加@Bean

    添加@Bean,表示当前方法的返回值是一个bean
    添加@Configuration,才能让Spring配置类扫描到

    在这里插入图片描述

名称@Bean
类型方法注解
位置方法定义上方
作用设置该方法的返回值作为spring管理的bean
属性value(默认):定义bean的id

  • Spring配置类扫描JdbcConfig类
    在这里插入图片描述
  • 在主函数获取bean
    在这里插入图片描述
5.1.2 使用@Import引入
  • 删除JdbcConfig类上的@Configuration

  • 在Spring配置类上使用@Import
    在这里插入图片描述

    @Import只能写一次,其参数是一个数组,可以引入多个配置类

名称@Import
类型类注解
位置类定义上方
作用导入配置类
属性value(默认):定义导入的配置类类名,
当配置类有多个时使用数组格式一次性导入多个配置类

5.2 注解开发实现为第三方bean注入资源

5.2.1 引入简单数据类型
  • 使用@Value

    放在属性定义上

    在这里插入图片描述

5.2.2 引入引用数据类型
  • 给@Bean的方法加形参

    Spring会在容器中查找BookDao的bean并自动装配进来,因此必须保证BookDao类被Spring配置类扫描到,也就是说容器中要由BookDao的bean

    在这里插入图片描述

6. 注解开发总结

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值