写在前面 当bean是单实例,并且没有设置懒加载时,Spring容器启动时,就会实例化bean,并将bean注册到IOC容器中,以后每次从IOC容器中获取bean时,直接返回IOC容器中的bean,不再创建新的bean. 如果bean是单实例,并且使用@Lazy注解设置了懒加载,则Spring容器启动时,不会实例化bean,也不会将bean注册到IOC容器中,只有第一次获取bean的时候,才会实例化bean,并且将bean注册到IOC容器中. 如果bean是多实例,则Spring容器启动时,不会…
写在前面 在前面的文章中,我们知道可以通过多种方式向Spring容器中注册bean.可以使用@Configuration结合@Bean向Spring容器中注册bean:可以按照条件向Spring容器中注册bean:可以使用@Import向容器中快速导入bean对象:可以在@Import中使用ImportBeanDefinitionRegistrar向容器中注册bean. 项目工程源码已经提交到GitHub:https://github.com/sunshinelyz/spring-annotat…
写在前面 在前面的文章中,我们学习了如何使用@Import注解向Spring容器中导入bean,可以使用@Import注解快速向容器中导入bean,小伙伴们可以参见<[Spring注解驱动开发]使用@Import注解给容器中快速导入一个组件>.可以在@Import注解中使用ImportSelector接口导入bean,小伙伴们可以参见<[Spring注解驱动开发]在@Import注解中使用ImportSelector接口导入bean>一文.今天,我们就来说说,如何在@Import注…
写在前面 最近在分析Spring源码时,在同一个类中写了嵌套的AOP方法,测试时出现:Spring AOP在同一个类里自身方法相互调用时无法拦截.哎,怎么办?还能怎么办呢?继续分析Spring源码,解决问题呗.于是乎,有了本文. 项目工程源码已经提交到GitHub:https://github.com/sunshinelyz/spring-annotation 问题阐述 Spring AOP在同一个类里自身方法相互调用时无法拦截.比如下面的代码: public class SomeService…
写在前面 在之前的文章中,我们介绍了如何使用@Bean注解指定初始化和销毁的方法,小伙伴们可以参见<[Spring注解驱动开发]如何使用@Bean注解指定初始化和销毁的方法?看这一篇就够了!!>,也介绍了使用InitializingBean和DisposableBean来处理bean的初始化和销毁,小伙伴们可以参见<[Spring注解驱动开发]Spring中的InitializingBean和DisposableBean,你真的了解吗?>.除此之外,在JDK中也提供了两个注解能够在…
按照条件注册bean 使用@Conditional注解来控制bean的注册 使用步骤 先实现Condition接口,条件写在matches方法里 注意事项:Condition接口是org.springframework.context.annotation.Condition,别选错了 public class MyCondition implements Condition { /** * @param context 判断条件能使用的上下文(环境) * @param metadata 当前标…
写在前面 我们可以将一些bean组件交由Spring管理,并且Spring支持单实例bean和多实例bean.我们自己写的类,可以通过包扫描+标注注解(@Controller.@Servcie.@Repository.@Component)的形式将其注册到IOC容器中,如果不是我们自己写的类,比如,我们在项目中引入了一些第三方的类库,此时,我们需要将这些第三方类库中的类注册到Spring容器中,该怎么办呢?此时,我们就可以使用@Bean和@Import注解将这些类快速的导入Spring容器中.接…
写在前面 在[String注解驱动开发专题]中,前面的文章我们主要讲了有关于如何向Spring容器中注册bean的知识,大家可以到[String注解驱动开发专题]中系统学习.接下来,我们继续肝Spring,只不过从本篇文章开始,我们就进入Spring容器中有关Bean的生命周期的学习. 项目工程源码已经提交到GitHub:https://github.com/sunshinelyz/spring-annotation Bean的生命周期 通常意义上讲的bean的名称周期,指的是bean从创建到初…
准备 1.使用 maven 创建一个 java 项目,依赖如下: <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.12.RELEASE</version> </dependency> <dependency> <groupId>…
写在前面 有些小伙伴问我,学习Spring是不是不用学习到这么细节的程度啊?感觉这些细节的部分在实际工作中使用不到啊,我到底需不需要学习到这么细节的程度呢?我的答案是:有必要学习到这么细节的程度,而且是有机会.有条件一定要学!吃透Spring的原理和源码!往往拉开人与人之间差距的就是这些细节的部分,当前只要是使用Java技术栈开发的Web项目,几乎都会使用Spring框架.而且目前各招聘网站上对于Java开发的要求几乎清一色的都是熟悉或者精通Spring.所以,你,很有必要学习Spring的细节…