Autowire

Spring(3)——装配 Spring Bean 详解

大憨熊 提交于 2020-07-28 14:19:36
装配 Bean 的概述 前面已经介绍了 Spring IoC 的理念和设计,这一篇文章将介绍的是如何将自己开发的 Bean 装配到 Spring IoC 容器中。 大部分场景下,我们都会使用 ApplicationContext 的具体实现类,因为对应的 Spring IoC 容器功能相对强大。 而在 Spring 中提供了 3 种方法进行配置: 在 XML 文件中显式配置 在 Java 的接口和类中实现配置 隐式 Bean 的发现机制和自动装配原则 方式选择的原则 在现实的工作中,这 3 种方式都会被用到,并且在学习和工作之中常常混合使用,所以这里给出一些关于这 3 种优先级的建议: 1. 最优先:通过隐式 Bean 的发现机制和自动装配的原则。 基于约定由于配置的原则,这种方式应该是最优先的 好处: 减少程序开发者的决定权,简单又不失灵活。 2. 其次:Java 接口和类中配置实现配置 在没有办法使用自动装配原则的情况下应该优先考虑此类方法 好处: 避免 XML 配置的泛滥,也更为容易。 典型场景: 一个父类有多个子类,比如学生类有两个子类,一个男学生类和女学生类,通过 IoC 容器初始化一个学生类,容器将无法知道使用哪个子类去初始化,这个时候可以使用 Java 的注解配置去指定。 3. 最后:XML 方式配置 在上述方法都无法使用的情况下,那么也只能选择 XML 配置的方式。

Spring5框架(从入门到入坟)

强颜欢笑 提交于 2020-07-27 06:10:55
1、Spring框架概述 1、Spring是轻量级 的开源 的JavaEE框架 2、Spring可以解决企业应用开发的复杂性 3、Spring有两个核心部分: IOC 和 Aop (1)IOC:控制反转,把创建对象过程交给Spring管理 (2)Aop:面向切面,不修改源代码进行功能增强 4、Spring特点 (1)方便解耦,简化开发 (2)Aop编程支持 (3)方便程序测试 (4)方便和其他框架进行整合 (5)方便进行事务操作 (6)降低API开发难度 5、选取Spring版本5.x学习 2、Spring框架下载 Spring官网:https://spring.io/projects/spring-framework#learn 下载网址:https://repo.spring.io/release/org/springframework/spring/ 5.2.6RELEASE版本 spring-5.2.6.RELEASE-dist.zip 3、案例 3.1 创建一个普通的java项目 导入4个jar包 spring-beans-5.2.6.RELEASE spring-context-5.2.6.RELEASE spring-core-5.2.6.RELEASE spring-expression-5.2.6.RELEASE commons-logging-1.1.1 /

Java Spring的IoC和AOP的知识点速记

时光毁灭记忆、已成空白 提交于 2020-05-02 03:26:54
Spring 简介 Spring解决的最核心的问题就是把对象之间的依赖关系转为用配置文件来管理,这个是通过Spring的依赖注入机制实现的。 Spring Bean 装配 1. IOC的概念以及在Spring容器中如何进行IOC的操作。 IOC:Inversion of Control,控制反转。在Java开发中,IOC意味着将你设计好的类交给系统去控制,而不是在你的类内部控制,这称为控制反转,就是被调用类的实例由原先的调用类控制创建、销毁现在转变成由Spring的容器管理。 2. Spring容器是如何管理Bean的生命周期的(如Bean的初始化方法,Bean的销毁方法) 创建:<bean name=”” class=”” 额外属性> 初始化:配置init­-method/实现接口InitializingBean 调用:context.getBean(),进行方法的调用 销毁:配置destroy-­method/实现DisposableBean接口 3. DI的概念以及在Spring框架注入有几种方式。使用构造注入对象,必须要注意什么问题? 注入方式: 构造注入[构造方法注入] 属性注入[属性的SET/GET] 方法注入[工厂注入] <!-- 构造函数注入 --> <bean id="user1" class="com.spring.test.model.User">

Java注解Annotation与自定义注解详解

无人久伴 提交于 2020-04-29 17:31:34
文章来源: http://www.jb51.net/article/136853.htm 一:Java注解简介 开发中经常使用到注解,在项目中也偶尔会见到过自定义注解,今天就来探讨一下这个注解是什么鬼,以及注解的应用场景和如何自定义注解。 下面列举开发中常见的注解 @Override:用于标识该方法继承自超类,当父类的方法被删除或修改了,编译器会提示错误信息(我们最经常看到的toString()方法上总能看到这货) @Deprecated:表示该类或者该方法已经不推荐使用,已经过期了,如果用户还是要使用,会生成编译的警告 @SuppressWarnings:用于忽略的编译器警告信息 Junit测试:@Test Spring的一些注解:@Controller、@RequestMapping、@RequestParam、@ResponseBody、@Service、@Component、@Repository、@Resource、@Autowire Java验证的注解:@NotNull、@Email 下面看一下注解Override.java的庐山真面目: @Target(ElementType.METHOD) @Retention(RetentionPolicy.SOURCE) public @ interface Override { } 二:Java注解基本知识 1

spring5 源码深度解析-----IOC 之 属性填充

家住魔仙堡 提交于 2020-04-28 02:24:54
doCreateBean() 主要用于完成 bean 的创建和初始化工作,我们可以将其分为四个过程: createBeanInstance() 实例化 bean populateBean() 属性填充 循环依赖的处理 initializeBean() 初始化 bean 第一个过程实例化 bean在前面一篇博客中已经分析完了,这篇博客开始分析 属性填充,也就是 populateBean() protected void populateBean(String beanName, RootBeanDefinition mbd, BeanWrapper bw) { PropertyValues pvs = mbd.getPropertyValues(); if (bw == null ) { if (! pvs.isEmpty()) { throw new BeanCreationException( mbd.getResourceDescription(), beanName, "Cannot apply property values to null instance" ); } else { // Skip property population phase for null instance. return ; } } // Give any

一个Spring Bean从无到有的过程

不打扰是莪最后的温柔 提交于 2020-04-24 14:34:21
有开头没结尾 经历了java开发变迁史,从早期编写原生的servlet、自研mvc和jdbc工具、和使用开源框架struts、hibernate、jsp、spring、springmvc、freemarker、springboot,到最后前后端分离式开发,一开始开发工具用的是editplus。相对来说,现在开发很好了,框架生态(只有spring生态传承下来了,其他都成了历史)。到spring生态圈终结了,它的体系太过庞大了,席卷了各国,项目产品技术换型的几率很小了。 一开始做Spring相关开发,写了大量xml配置,到后来换成了注解式开发,虽然能干活,可并不知道它的内在原理和设计理念是什么,随着时间的累计,需要做sping 扩展或集成,就要研究源码级是如何实现的了。我就以一个Spring Bean如何创建开始,不要小看一个Bean,很多码农都说不清它的创建过程。 简单介绍Spring框架是一个开放源代码的 J2EE 应用程序框架,由 Rod Johnson 发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。 Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强大IOC、 AOP 及Web MVC等功能。Spring可以单独应用于构筑应用程序,也可以和Struts、Webwork

Spring IOC 容器源码分析

强颜欢笑 提交于 2020-04-21 05:02:27
人不学不知道 Spring 最重要的概念是 IOC 和 AOP,本篇文章其实就是要带领大家来分析下 Spring 的 IOC 容器。既然大家平时都要用到 Spring,怎么可以不好好了解 Spring 呢?阅读本文并不能让你成为 Spring 专家,不过一定有助于大家理解 Spring 的很多概念,帮助大家排查应用中和 Spring 相关的一些问题。 本文采用的源码版本是 4.3.11.RELEASE,算是 5.0.x 前比较新的版本了。为了降低难度,本文所说的所有的内容都是基于 xml 的配置的方式,实际使用已经很少人这么做了,至少不是纯 xml 配置,不过从理解源码的角度来看用这种方式来说无疑是最合适的。 阅读建议:读者至少需要知道怎么配置 Spring,了解 Spring 中的各种概念,少部分内容我还假设读者使用过 SpringMVC。本文要说的 IOC 总体来说有两处地方最重要,一个是创建 Bean 容器,一个是初始化 Bean,如果读者觉得一次性看完本文压力有点大,那么可以按这个思路分两次消化。读者不一定对 Spring 容器的源码感兴趣,也许附录部分介绍的知识对读者有些许作用。 希望通过本文可以让读者不惧怕阅读 Spring 源码,也希望大家能反馈表述错误或不合理的地方。 引言 先看下最基本的启动 Spring 容器的例子: public static void

SpringBoot启动流程分析(六):IoC容器依赖注入

心已入冬 提交于 2020-04-18 04:09:03
SpringBoot系列文章简介 SpringBoot源码阅读辅助篇:    Spring IoC容器与应用上下文的设计与实现 SpringBoot启动流程源码分析: SpringBoot启动流程分析(一):SpringApplication类初始化过程 SpringBoot启动流程分析(二):SpringApplication的run方法 SpringBoot启动流程分析(三):SpringApplication的run方法之prepareContext()方法 SpringBoot启动流程分析(四):IoC容器的初始化过程 SpringBoot启动流程分析(五):SpringBoot自动装配原理实现 SpringBoot启动流程分析(六):IoC容器依赖注入 笔者注释版Spring Framework与SpringBoot源码git传送门:请不要吝啬小星星 spring-framework-5.0.8.RELEASE SpringBoot-2.0.4.RELEASE 一、前言   前面我们对IoC容器的初始化过程进行了详细的分析,这个初始化过程完成的主要工作是在IoC容器中建立BeanDefinition数据映射。在此过程中并没有看到IoC容器对Bean依赖关系进行注入,接下来分析一下IoC容器是怎样对Bean的依赖关系进行注入的。   前面在refresh()--

Spring5深度源码分析(三)之AnnotationConfigApplicationContext启动原理分析

落花浮王杯 提交于 2020-04-18 04:05:56
代码地址: https://github.com/showkawa/spring-annotation/tree/master/src/main/java/com/brian AnnotationConfigApplicationContext启动原理分析主要分析下面三点 1.@Qualifier与@Primary注解的使用 2.BeanFactory与ApplicationContext区别 3.AnnotationConfigApplicationContext启动原理分析 1.@Qualifier与@Primary注解的使用 下面是 @Qualifier 和 @Primary注解的官方解释 @ Qualifier This annotation may be used on a field or parameter as a qualifier for candidate beans when autowiring. It may also be used to annotate other custom annotations that can then in turn be used as qualifiers.这个注释可用于作为预备bean的字段或参数,也可以用在其他的自定义注释下 @Qualifier(“XXX”) Spring的Bean注入配置注解

了解Spring

99封情书 提交于 2020-04-16 19:09:29
【推荐阅读】微服务还能火多久?>>> Spring- 第一章 初始Spring Spring是应用了很多优秀的设计模式,对于项目的实现,提供了优秀的解决方法;Spring是一个轻量级(低侵入)MVC和逻辑代码框架 . 类与类之间的解耦合 IOC MVC 框架侵入 IOC(Inverse Of Control) 控制反转 大管家 将传统创建对象的控制权 new ,交由spring容器中(配置文件)中来声明和实现 MVC框架中的,对象管理的大管家,实现类与类之间的解耦合 IOC的好处: 解耦合 IOC实现原理:工厂设计模式---反射(无参构造方法) 配置文件+工厂类 Spring-IOC实现: 1. 创建一个java项目 2. 导包 3. 复原一个MyBatis框架 下的Product例子 4. 复制一个Spring的主配置文件 bean 标签来表示一个对象; id 是一个对象的唯一标识; class 是类的全路径; 5. 由Spring来创建对象 5.1 加载Spring主配置文件 5.2 根据Bean ID,由工厂创建对象 5.3 正常调用该对象的方法 DI(Dependence I njection)依赖注入 给属性赋值 为对象的属性赋值 1. 设值注入 底层实现set方法赋值 ref 引用其它对象,对象的嵌套 2. 构造注入 底层实现构造方法注入