spring
入门小站
这个作者很懒,什么都没留下…
展开
-
Spring依赖处理过程源码分析
AbstractAutowireCapableBeanFactory#doCreateBean创建BeanAbstractAutowireCapableBeanFactory#populateBean属性的核心注入方法InstantiationAwareBeanPostProcessor#postProcessProperties用于给bean处理值注入,@Autowire就在这个过程处理注入InjectionMetadata#inject–>AutowiredMethodElement#in.原创 2020-07-25 00:02:18 · 207 阅读 · 0 评论 -
Spring延迟依赖注入ObjectFactory/ObjectProvider
ObjectProvider 继承自 ObjectFactoryObjectFactory延迟注入 (单一类型注入/集合类型注入)ObjectProvider延迟注入 (单一类型注入/集合类型注入) 推荐实体类Rumenz/SuperRumenzpackage com.rumenz;public class Rumenz{ private Integer id; private String name; public Integer getId() { .原创 2020-07-22 23:33:03 · 750 阅读 · 0 评论 -
Spring限定注入逻辑分组@Qualifier
使用场景当你创建多个具有相同类型的 bean 时,并且想要用一个属性只为它们其中的一个进行装配,在这种情况下,你可以使用 @Qualifier 注释和 @Autowired 注释通过指定哪一个真正的 bean 将会被装配来消除混乱。下面显示的是使用 @Qualifier 注释的一个示例。实体类Rumenz/SuperRumenzpackage com.rumenz;public class Rumenz{ private Integer id; private String原创 2020-07-21 23:55:06 · 323 阅读 · 0 评论 -
Spring基础类型注入演示案例
原生类型(Primitive ): boolean、byte、char、short、int 、float、long、double标量类型(Scalar ): Number、Character、Boolean、Enum、Locale、Charset、Currency、Properties、UUID常规类型(General ): Object、String、Timezone、Calendar、Optional Spring 类型:Resource、Inputsource、Formatter部分注入案例.原创 2020-07-21 00:05:25 · 151 阅读 · 0 评论 -
Spring Aware接口注入
Aware自动注入BeanNameAwareBeanFactoryAwareApplicationContextAwareMessageSourceAwareApplicationEventPublisherAwareResourceLoaderAwareAware接口描述BeanNameAware可以在Bean中得到它在IOC容器中的Bean的实例的名字BeanFactoryAware可以在Bean中得到Bean所在的IOC容器,从而直接在Bean中使用I原创 2020-07-19 00:35:53 · 334 阅读 · 0 评论 -
Spring 方法注入
实现方法/手动模式Java 注解配置元信息@Autowired@Resource@Inject(可选)@Bean@Autowired 只按照byType 注入,由Spring提供@Resource 默认按byName自动注入,也提供按照byType 注入,由JDK提供// @Inject 需要依赖<dependency> <groupId>javax.inject</groupId> <artifactId>原创 2020-07-17 23:59:21 · 667 阅读 · 0 评论 -
Spring字段注入
实现方法/手动模式Java 注解配置元信息@Autowired 只按照byType 注入,由Spring提供@Resource @Resource默认按byName自动注入,也提供按照byType 注入@Inject(可选)@Autowired 只按照byType 注入,由Spring提供@Resource 默认按byName自动注入,也提供按照byType 注入,由JDK提供// @Inject 需要依赖<dependency> <group原创 2020-07-17 23:55:43 · 1108 阅读 · 0 评论 -
Spring Setter方法注入
Setter方法输入实体类Rumenz.java/Holder.javapackage com.rumenz;public class Rumenz { private Integer id; private String name; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; }原创 2020-07-16 23:55:57 · 180 阅读 · 0 评论 -
Spring依赖注入的模式和类型
手动模式 - 配置或者编程的方式,提前安排注入规则XML 资源配置元信息Java 注解配置元信息API 配置元信息自动模式 - 实现方提供依赖自动关联的方式,按照內建的注入规则Autowiring(自动绑定)实体类Rumenz.javapackage com.rumenz;public class Rumenz { private Integer id; private String name; public Integer getId() {原创 2020-07-15 00:14:03 · 139 阅读 · 0 评论 -
BeanFactory和ObjectFactory的区别
BeanFactorypackage org.springframework.beans.factory;import org.springframework.beans.BeansException;import org.springframework.core.ResolvableType;import org.springframework.lang.Nullable;public interface BeanFactory { String FACTORY_BEAN_PREFIX =原创 2020-07-13 23:56:37 · 509 阅读 · 0 评论 -
Spring依赖查找中的常见异常
文章目录BeansException的子接口NoSuchBeanDefinitionException不存在要查找的BeanNoUniqueBeanDefinitionException 容器中存在多个同类型的BeanBeanInstantiationException不能被实例化BeanCreationException Bean初始化异常BeanDefinitionStoreException 配置元错误BeansException的子接口异常类型触发条件(举例)场景举例NoS原创 2020-07-12 23:34:34 · 225 阅读 · 0 评论 -
Spring内建可查找的依赖
AbstractApplicationContext 内建可查找的依赖Bean 名称Bean 实例使用场景environmentEnvironment 对象外部化配置以及 ProfilessystemPropertiesjava.util.Properties 对象Java 系统属性systemEnvironmentjava.util.Map 对象操作系统环境变量messageSourceMessageSource 对象国际化文案lifecyc原创 2020-07-12 00:02:07 · 187 阅读 · 0 评论 -
Spring安全依赖查找
依赖查找安全性对比依赖查找类型代表实现是否安全单一类型BeanFactory#getBean否ObjectFactory#getObject否ObjectProvider#getIfAvailable是集合类型ListableBeanFactory#getBeansOfType是ObjectProvider#stream是实体类Rumenz.javapackage com.rumenz;public class Rumenz{.原创 2020-07-10 23:54:30 · 292 阅读 · 0 评论 -
Spring 延迟依赖查找Bean
Bean 延迟依赖查找接口// 一个对象工厂public interface ObjectFactory<T> { // 返回一个对象 T getObject() throws BeansException;}org.springframework.beans.factory.ObjectFactory此接口定义了一个简单工厂,是一个函数式接口,可以在调用时返回一个对象实例(可能是共享的或独立的)。org.springframework.beans.fa原创 2020-07-10 00:10:07 · 610 阅读 · 0 评论 -
Spring 层次性依赖查找Bean
层次性依赖查找接口 - HierarchicalBeanFactory双亲 BeanFactory:getParentBeanFactory()层次性查找根据 Bean 名称查找基于 containsLocalBean 方法实现根据 Bean 类型查找实例列表单一类型:BeanFactoryUtils#beanOfType集合类型:BeanFactoryUtils#beansOfTypeIncludingAncestors根据 Java 注解查找名称列表BeanFac.原创 2020-07-09 00:08:56 · 340 阅读 · 0 评论 -
Spring集合类型依赖查找
集合类型依赖查找接口 - ListableBeanFactory根据 Bean 类型查找获取同类型 Bean 名称列表getBeanNamesForType(Class)getBeanNamesForType(ResolvableType)获取同类型 Bean 实例列表getBeansOfType(Class) 以及重载方法通过注解类型查找获取标注类型 Bean 名称列表getBeanNamesForAnnotation获取标注类型 Bean 实例列表ge原创 2020-07-08 00:08:11 · 250 阅读 · 0 评论 -
Spring单一类型依赖查找Bean
单一类型依赖查找接口 - BeanFactoryBeanFacotry是spring中比较原始的Factory,BeanFactory是个Factory,也就是IOC容器或对象工厂根据Bean名称查找getBean(String)覆盖默认参数getBean(String,Object)根据Bean类型查找Bean实时查找getBean(Class)覆盖默认参数 getBean(Class,Object)Bean延时查找getBeanProvider(Class)g原创 2020-07-07 00:00:39 · 524 阅读 · 0 评论 -
如何注册Spring Bean
BeanDefinition外部单体对象(对象的生命周期并不由Spring来直接管理)Rumenz.javapackage com.rumenz;public class Rumenz { public void print(){ System.out.println("......."); }}BeanDefinition(BeanDefinitionRegistry)package com.rumenz;public class DemoAppl.原创 2020-07-04 00:20:05 · 206 阅读 · 0 评论 -
Spring Bean垃圾回收
覆盖对象的finalizefinalize()并不是必须要执行的,它只能执行一次或者0次。Spring Bean垃圾回收肯定是在关闭Spring上下文之后.Rumenz.javapackage com.rumenz;public class Rumenz { public void print(){ System.out.println("......."); } //覆盖finalize方法 @Override public vo.原创 2020-07-04 00:15:18 · 978 阅读 · 0 评论 -
销毁Spring Bean的三种方法
@PreDestroy Java标准注解实现DisposableBean的Destroy()方法自定义销毁方法XML 配置:<bean destroy=“destroy” … />Java注解 @Bean(destroy=“destroy”)Java API AbstractBeanDefinition#setDestroyMethodName(String)DemoApplication.javapackage com.rumenz;public class Demo.原创 2020-07-03 00:09:49 · 1160 阅读 · 1 评论 -
延迟初始化Spring Bean的几种方式
XML 配置:<bean lazy-init=”true” … />Java 注解:@Lazy(true)Spring 中默认是非延迟加载Bean的,也就是提前把Bean初始化好,用的时候直接用. 优点是运行的时候比较快(提前初始化了,直接用). 缺点是启动慢和占用内存,因为要初始化很多Bean.延迟加载是需要的时候再去初始化Bean. 优点是解约内存,启动快(不需要提前初始化Bean). 缺点是运行的时候比较慢(用的时候先要初始化才能用).@Lazy开启Bean延迟加载D.原创 2020-07-02 00:24:33 · 606 阅读 · 0 评论 -
Spring Bean初始化的几种方法以及执行顺序
@PostConstruct 构造后置执行@Bean(initMethod=“xxx”) 初始化功能@InitializingBean#afterPropertiesSet 属性填充后执行DefaultRumenzFactory.javapackage com.rumenz;import org.springframework.beans.factory.InitializingBean;import javax.annotation.PostConstruct;public class.原创 2020-07-01 00:02:21 · 390 阅读 · 0 评论 -
Spring Bean实例化的几种特殊方式
ServiceLoader 利用JDK里面的反向控制ServiceLoaderFactoryBeanAutowireCapableBeanFactory#createBeanBeanDefinitionRegistry#registerBeanDefinitionRumenzFactory接口和默认实现类DefaultRumenzFactoryRumenzFactory.javapackage com.rumenz;public interface RumenzFactory { .原创 2020-06-30 00:09:29 · 157 阅读 · 0 评论 -
Spring Bean初始化的几种常规方式
通过构造方法实例化通过静态工厂实例化通过实例工厂实例化通过FactoryBean实例化RumenzA实体类package com.rumenz;public class RumenzA { private String id; private String name; public RumenzA() { System.out.println("RumenzA 无参构造方法"); } public RumenzA(String id.原创 2020-06-29 00:00:31 · 464 阅读 · 0 评论 -
Spring中将BeanDefinition注册到IOC容器中
Spring中将BeanDefinition注册到IOC容器中XML配置元信息<bean name=”…” … />注解:@Bean,@Component,@Import命名:BeanDefinitionRegistry#registerBeanDefition非命名BeanDefinitionReaderUtils#registerWithGeneratedNameAnnotatedBeanDefinitionReader#registerRum原创 2020-06-27 23:49:23 · 232 阅读 · 0 评论 -
Spring Bean懒加载与非懒加载
懒加载:对象使用的时候才去创建。节省资源,但是不利于提前发现错误;提前加载:容器启动时立马创建。消耗资源,但有利于提前发现错误Spring 默认设置是非懒加载1,由于在controller中会注入service层的类,由于,controller层面上的spring-mvc不是懒加载,即当在controller中注入service时,就会初始化此service类。因此即调用到谁初始化谁2,如果一个bean被设置为延迟初始化,而另一个非延迟初始化的singleton bean依赖于它,那么当A.原创 2020-06-25 00:03:32 · 2761 阅读 · 0 评论