本人笔记1-spring基础

本文详细介绍了Spring框架的基础知识,包括类对象的创建、Spring容器的工作原理、IoC和DI概念、日志配置、BeanFactory和ApplicationContext接口、XML配置、Bean的scope设置、Spring的生命周期管理、FactoryBean的应用以及自动装配(Autowired)和基于注解的组件扫描。
摘要由CSDN通过智能技术生成

spring基础知识

1 spring是怎么创建类的对象的?

显而易见:先通过配置文件等方式获得类的全类名,然后通过反射 Class.forName获得类的class对象,在获得类的构造函数生成类的对象,并存入spring容器里。

2 spring容器实际上就是一个Map<String,BeanDefinition>,

key默认是类名首字母小写,BeanDefinition则是类的定义信息

spring存储bean的map在DefaultListableBeanFactory类中

3对于日志配置文件,无外乎先配置日志格式,输出类型(控制台,文件,按大小,日期分多个文件),两者一起。再配置日志级别。

4 ioc介绍,

ioc本身是一个理念,类似于算法的一个东西,需要别人去实现他,而spring就是实现了ioc 。

ioc就是控制反转,即把对象的创建权和对象之间依赖的管理权交给第三方容器去处理,而不是程序员自己写代码去new对象。这个第三方容器时常被称为ioc容器。

di依赖注入就是实现控制反转的一种方式,具体即通过配置给对象的属性赋值。通常是配置setter方法属性(字符串,数据,map)或者构造函数来实现di,具体见文章

5 BeanFactory接口是ioc容器的基本实现,即父类。ApplicationContext接口是BeanFactory的子类,

提供了更多高级特性,我们一般使用ApplicationContext的具体实现类
在这里插入图片描述

6 要从spring的ioc容器中获取一个bean,

可以通过id匹配,就是key匹配。或者类或接口匹配,类或接口匹配时要求ioc容器中只有一个该类或接口的对象,否则会报错。或者类或接口和id双重匹配。通过id匹配不用担心重复id的对象,可以ioc容器是一个map,id就是map的key,map的key是不会重复的。

而类或接口判断具体是通过instanceof操作实现『对象 instanceof 指定的类型』

7 平时看xml文件,有时会看到CDATA的字样,其实其效果就跟转义字符串差不多,具体如下:

在这里插入图片描述

8解读下面的xml头部信息

<?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">
    <!-- 引入外部属性文件 -->
	<context:property-placeholder location="classpath:jdbc.properties"/>
</beans>

xmlns即表示要定义xml的命名空间,声明xml元素的时候带上xmlns命令空间,就可以防止一个xml文件里元素名重复导致的冲突。xmlns表示默认的命名空间,xmlns:后面(如xsi,context)是整个命令空间的缩写。在下面的标签里会用到,

xmlns:xsi表示缩写为xsi的命名空间,xmlns:context表示缩写为context的命名空间。元素context:property-placeholder就是在context命名空间下的元素。

xsi:schemaLocation描述上面的命名空间url的具体文档的url在哪里?里面用换行符分割,第一项表示命名空间url,第二项表示命名空间文档的url,所以它的项的数量必须是偶数,否则报错。

9 spring配置bean是如果配置scope属性

为singleton(默认值),则对象在容器初始化时创建

为prototype,则对象在调用getBean()时创建

10 spring bean的生命周期

具体的生命周期过程**

  • bean对象创建(调用无参构造器)
  • 给bean对象设置属性
  • bean的后置处理器(初始化之前)
  • bean对象初始化(需在配置bean时指定初始化方法)
  • bean的后置处理器(初始化之后)
  • bean对象就绪可以使用
  • bean对象销毁(需在配置bean时指定销毁方法)
  • IOC容器关闭

11 后置处理器和对象初始化方法的区别是,

总的来说,后置处理器是 Spring 提供的一个通用机制,用于在 bean 的生命周期的特定阶段执行自定义逻辑,而对象初始化方法是每个 bean 可以独立定义的一个初始化逻辑,用于在 bean 实例化后执行一些特定的初始化操作。

12 FactoryBean使用工厂模式,帮你把复杂的对象创建逻辑屏蔽起来。

从spring的ioc容器中取出FactoryBean接口实现类的对象时(getBean方法),实际上得到的是调用FactoryBean接口的getObject()方法得到的返回值。这在spring整合第三方框架,比如mybatis时,会经常用到。

13 配置bean的类属性的自动装配,即autowire="byType"或者autowire=“byName”,前者通过class属性匹配,没有则为null。后者通过id属性匹配

java编程注意点

1 “1.1.1.1”.split(“.”)不对,会报错,应该用"1.1.1.1".split(“\\.”)

基于注解管理Bean

1 需要配置开启注解并且指令扫描根目录:

<context:component-scan base-package="com.primer.spring6"></context:component-scan>

可配置扫描过程中,只扫描指定类或注解,或排除指令类或注解。

2 @Autowired默认是byType

1即通过class属性匹配,没有则根据注解的required属性,默认是true则报错,如果为false,则为null。

2@Autowired除了可以放在属性上,还能放在set方法,构造函数和参数上。

3如果有多个则会报错,或者搭配@Qualifier即搭配byName双重匹配。

3@Resource注入

1默认是byNname,未指定name时,使用属性名作为name,通过name找不到的话会自动启动通过类型byType装配,byType注入时,某种类型的Bean只能有一个。

2@Resource注解用在属性上、setter方法上。

4不使用spring配置文件 全注解开发

使用@Configuration和@ComponentScan注解。

@Configuration
//@ComponentScan({"com.atguigu.spring6.controller", "com.atguigu.spring6.service","com.atguigu.spring6.dao"})
@ComponentScan("com.atguigu.spring6")
public class Spring6Config {
}

等于

<?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-3.0.xsd
    http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context.xsd">
    <!--开启组件扫描功能-->
    <context:component-scan base-package="com.primer.spring6"></context:component-scan>
</beans>
  • 33
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值