Spring知识点总结

1. BeanFactory与AppicationContent区别?

BeanFactory是Spring框架中IOC容器的顶层接口,定义了一些基本的功能接口及规范(基础容器);而AppicationContent(容器的高级接口)是BeanFactory的一个子接口,AppicationContent具备BeanFactory的全部功能,且较之有更丰富的功能,比如国际化功能,资源访问(XML,java配置类)等

2.spring中xml方式实例化对象的三种方式

A.通过 对象的无参构造创建对象

B. 静态⽅法创建对象

eg:  在BeanFactory中定义静态方法如getStaticInstance(),返回   new ConnectionUtils() 对象

<bean id="connectionUtils" class="com.kay.factory.BeanFactory" factory-method="getStaticInstance"></bean>
public class BeanFactory {
    public static ConnectionUtils getStaticInstance(){
        return new ConnectionUtils();
    }

}

C.使⽤实例⽅法创建对象

eg: 通过 BeanFactory 的实例方法创建 ConnectionUtils 对象

<bean id="beanFactory" class="com.kay.factory.BeanFactory"></bean>
<bean factory-bean="beanFactory" factory-method="getInstance" id="connectionUtils"></bean>
public class BeanFactory {
    public ConnectionUtils getInstance(){
        return new ConnectionUtils();
    }
}

3.spring中Bean的作用域及⽣命周期

默认是单例的(scope="singleton" ),容器启动时创建,容器销毁时销毁(与容器的生命周期一致)

多例:scope="prototype" 使用对象的时候创建,当对象长时间不使用,由JVM垃圾回收器回收 (当作用范围设置为多例时,spring框架只负责创建,不负责销毁)

4.spring中<bean>标签下属性

id:bean的唯一标识;

class: 要创建的bean的全限定类名

scope: 指定对象的作用范围

factory-method:  用户创建当前对象的工厂对应的方法名(见2)

与class一起使用,则方法为static修饰的静态方法;

与factory-bean一起使用时,class属性失效;

factory-bean:  用户创建当前对象的工厂对应的ID(见2) 配置此属性后,class属性失效

init-method:指定对象的初始化方法

destroy-method: 指定对象的销毁方法

lazy-init: 延迟加载,默认为fasle,即立即加载,在容器启动时,立即实例化;

        当lazy-init设置为true时,将不会在ApplicationContext启动时被提前实例化,而是在第一次通过getBean向容器索取时被实例化;

        A.如果一个立即加载的bean1引用了延迟加载的bean2,那么bean1在容器启动时被实例化,由于bean2被bean1引用,所以bean2也会被实例化;这种情况也符合bean在被第一次getBean时实例化的规则;

        B.如果配置了scope="pototype",时即使设置了lazy-init=“false”,在容器初始化的时候也不会被实例化,而是在getBean时才会被实例化

        C.对于不长使用的bean可以设置延迟加载

5. XMl方式依赖注入

A.构造函数注入

必须有构造函数,且类中提供的构造函数参数个数必须和配置的参数个数⼀致,且数据类型匹配

xml中<constructor-arg> 标签 name:指定的属性名,value属性值 ref:指定其他类型,为其他类型的bean唯一标识ID; index:用于指定构造函数中对应索引位置对象赋值(0开始)

B.Set注入

需要有Set方法配置

XML中使用<property>标签, name:set+name = set方法的方法名;value:要注入的值;ref:指定的其他类型对应的bean标识Id;

6.spring中常用注解对应的XML中标签或属性关系

IOC
@Component("自定义命名,不写则默认为首字母小写,后同")/@Controller、@Service、@Repository分别⽤于控制层类、服务层类、dao层类 bean
@Scope("prototype")(类上,默认是单例singleton)   scope  
@PostConstruct(方法上)   init-method 指定对象初始化的方法
@PreDestory(方法上)    destory-method  指定对象的销毁方法

DI注入:
@Autowired 为Spring提供的注解,按照类型注入 当存在一个接口有多个实现类,无法唯一确定时+ @Qualifier(name="指定对应的名称") 配合使用
@Autowired
@Qualifier(name="xxx") 

@Resource 由J2EE提供,需要导包javax.annotation.Resource
name 指定名称(根据bean的Id查找)
type 指定类型(根据类型查找)
根据两者配置确定查询条件为单一条件或者组合条件;找不到或者找到多条,均返回异常
都没有配置 默认按照name查询(即ID)

@Configuration 注解,表名当前类是⼀个配置类
@ComponentScan 注解,替代 context:component-scan 
@PropertySource,引入外部属性配置文件 @PropertySource("classpath:jdbc.properties")
@Import 引入其他配置类
@Value 对变量赋值,可以直接赋值,也可以使用${} 读取资源配置文件中的信息
@Bean 将方法返回的对象加入到SpringIOC中(配合Configuration使用)

7.FactoryBean作用及用法

FactoryBean是工厂bean,可以用来创建某一类型的bean实例(常用于创建复杂的bean对象) 2中创建对象的三种方式中后两种与FactoryBean的作用相识

在FactoryBean中定义了三个接口

public interface FactoryBean<T> {
 @Nullable
 // 返回FactoryBean创建的Bean实例,如果isSingleton返回true,则该实例会放到Spring容器
 // 的单例对象缓存池中Map
 T getObject() throws Exception;
 @Nullable
 // 返回FactoryBean创建的Bean类型
 Class<?> getObjectType();
 // 返回作⽤域是否单例
 default boolean isSingleton() {
 return true;
 } }

使用方法

1. 要创建的对象Company ,用自定义个的MyFactoryBean实现FactoryBean<A> 并实现其中的方法,在getObject中实现生成Company的逻辑

public class MyFactoryBean implements FactoryBean<Company> {
    @Override
    public Company getObject() throws Exception {
        // getObject 中编写 对象 的生成逻辑
        return new Company("name is kay", "address is aaaa", 111);
    }

    @Override
    public Class<?> getObjectType() {
        return Company.class;
    }

    @Override
    public boolean isSingleton() {
        return false;
    }
}

2. xml中配置

    <bean id="myFactoryBean" class="com.kay.factoryBean.MyFactoryBean"></bean>

3.获取Company对象通过使用MyFactoryBean对应的ID从IOC中得到:

 applicationContext.getBean("myFactoryBean");

而想要获取MyFactoryBean对象则需要 在id myFactoryBean 前面加上& 可以在BeanFactory接口类中查看为什么是& (在BeanFactory源码中,定义了 String FACTORY_BEAN_PREFIX = "&";)

applicationContext.getBean("&myFactoryBean")

8. BeanFactoryPostProcessor 

BeanFactory级别的后置处理器,是针对整个Bean工厂的处理,作用在BeanFactory创建后,已经读取了xml中配置信息并将<bean>标签中信息封装到了BeanDefinition之后,在实例化Bean之前;

自定义BeanFactoryPostProcessor需要实现 BeanFactoryPostProcessor接口及对应的postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory)方法 beanFactory 中可通过getBeanDefinition(String beanName)获取对应的BeanDefinition对象

例如: PropertyPlaceholderConfigurer

其父类PropertyResourceConfigurer实现了BeanFactoryPostProcessor接口,Spring框架,在将<bean>标签封装到BeanDefinication后,会进入PropertyResourceConfigurer的postProcessBeanFactory方法,将解析<propery>中的占位符并拿到对应的值,重复赋值到BeanDefinication中(例如${jdbc.driver} 将被替换成实际的值)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
学习尚硅谷视频整理的文档 Spring Boot 1 1 Spring Boot入门 4 1.1 简介 4 1.2 微服务(martin fowler发表了一篇文章) 5 1.3 环境约束 7 1.4 第一个Spring Boot项目(jar):HelloWorld 8 1.5 入门案例详解 11 1.5.1 POM文件 11 1.5.2 主程序类,主入口类 12 1.6 使用Spring Initializer向导快速创建Spring Boot 16 2 Spring Boot配置 18 2.1 配置文件 18 2.2 YML语法 19 2.3 YML配置文件值获取 21 2.4 properties配置文件乱码问题 24 2.5 @ConfigurationProperties与@Value的区别 25 2.6 配置@PropertySource、@ImportResource、@Bean 27 2.7 配置文件占位符 30 2.8 Profile多环境支持 31 2.9 配置文件的加载位置 33 2.10 外部配置加载顺序 36 2.11 自动配置原理 37 2.12 @Conditional派生注解 41 3 Spring Boot与日志 42 3.1 日志框架分类和选择 42 3.2 SLF4j使用 43 3.3 其他日志框架统一转换成slf4j+logback 44 3.4 Spring Boot日志使用 45 3.5 Spring Boot默认配置 47 3.6 指定日志文件和日志Profile功能 52 3.7 切换日志框架(不使用SLF4j+LogBack) 54 4 Spring Boot与Web开发 55 4.1 Web开发简介 55 4.2 静态资源映射规则 56 4.3 引入Thymeleaf 60 4.4 Thymeleaf语法 61 4.5 SpringMVC自动配置原理 67 4.6 SpringBoot扩展与全面接管 70 4.7 如何修改SpringBoot的默认配置 72 4.8 【实验】CRUD操作 73 4.8.1 默认访问首页 73 4.8.2 登录页面国际化 74 4.8.3 登录 80 4.8.4 拦截器进行登录检查 81 4.8.5 实验要求(没按要求做,不想改了!) 82 4.8.6 CRUD-员工列表 83 4.8.7 CRUD-员工修改 86 4.8.8 CRUD-员工添加 87 4.8.9 CRUD-员工删除 88 4.9 错误处理原理&错误页面定制 90 4.10 配置嵌入式Servlet容器(springboot 1.50版本) 97 4.10.1 如何定制和修改Servelt容器的相关配置 97 4.10.2 注册servlet三大组件【servlet,filter,listener】 98 4.10.3 替换为其他嵌入式容器 102 4.10.4 嵌入式servlet容器自动配置原理 103 4.10.5 嵌入式servlet容器启动原理 103 4.11 使用外置的Servlet容器 104 4.11.1 步骤 104 4.11.2 原理 107 5 Spring Boot与Docker(虚拟化容器技术) 110 5.1 简介 110 5.2 核心概念 111 5.3 安装Docker 112 5.4 Docker常用命令&操作 113 5.5 安装MySQL示例 114 6 Spring Boot与数据访问 115 6.1 JDBC 115 6.1.1 实现 115 6.1.2 自动配置原理 116 6.2 整合Durid数据源 117 6.3 整合Mybatis 122 6.3.1 注解版 123 6.3.2 配置文件版 124 6.4 整合SpringData JPA 125 6.4.1 SpringData简介 125 6.4.2 整合 126 7 Spring Boot启动配置原理 128 7.1 启动流程(Springboot 1.50版本) 128 7.1.1 创建SpringApplication对象 129 7.1.2 运行run方法 130 7.1.3 编写事件监听机制 132 8 Spring Boot自定义starters 136 8.1 概述 136 8.2 步骤 137 9 更多Springboot整合示例 144 10 Spring Boot与缓存 145 10.1 JSR107缓存规范 145 10.2 Spring的缓存抽象 146 10.2.1 基本概念 146 10.2.2 整合项目 146 10.2.3 CacheEnable注解 148 10.2.4 Cache注解 150 10.3 整合redis 154 10.3.1 在Docker上安装redis 154 10.3.2 Redis的Template 154 10.3.3 整合(百度) 155

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值