Spring框架
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架相关的知识,希望对你有一定的参考价值。
说明:摘自Spring MVC学习指南
Spring框架是一个开源的企业应用开发框架。
- 依赖注入
Spring的Core和Bean两个模块,提供了依赖注入解决方案。很多框架都采用了依赖注入技术,那么,什么是依赖注入技术?
举例说明:有两个组件A和B,A依赖B。假定A是一个类,且A有一个方法importantMethod使用到了B,如下:
1 public class A 2 { 3 public void importantMethod() 4 { 5 B b = ... // get an instance of B 6 b.userfulMethod (); 7 } 8 }
要使用B,类A必须获得组件B的实例引用。若B是一个具体类,则可以通过new关键字直接创建B实例。但是,如果B是接口,且有多个实现,则问题变得复杂;固然我们可以任意选择接口B的一个实现类,但这也意味着A的可重用性大大降低了,因为无法采用B的其它实现。
依赖注入是这样处理此类场景的,接管对象的创建工作,并将该对象的音乐注入需要的该对象的组件。以上述例子为例,依赖注入框架会分别创建对象A和对象B,将对象B注入到对象A中。
为了能让框架进行依赖注入,程序员需要编写特定的set方法或者构建方法。例如:
1 public class A 2 { 3 private B b; 4 public void importantMethod() 5 { 6 // no need to worry aboud creating B anymore 7 // B b = ... // get an instance of B 8 b.usefulMethod(); 9 } 10 11 public void setB(B b) 12 { 13 this.b = b; 14 } 15 }
修改后的A新增了一个set方法,该方法将被框架调用,以注入一个B的实例。由于对象依赖由依赖注入,类A的importantMethod方法不在需要在调用B的usefulMethod方法钱去创建一个B的实例。
当然,也可以采用构造器的方法注入,如:
public class A { private B b; public A (B b) { this.b = b; } public void importantMethod() { // no need to worry about creating B any more // B b = ... // get an instance of B b.usefulMethod(); } }
本例中,Spring会先创建B的实例,再创建实例A,然后把B注入到实例A中。
通过提供一个控制反转容器(或者依赖注入容器),Spring为我们提供一种可以“聪明”地管理Java对象依赖关系的方法。其优雅之处在于,程序员无需了解Spring框架的存在,更不需要引入任何Spring类型。
从1.0版本开始,Spring就同时支持setter和构造器方式的依赖注入。从2.5版本开始,通过Autowired注解,Spring支持基于field方式的依赖注入,但缺点是程序必须引用org.springframework.beans.factory.annotation.Autowired,这对Spring产生了依赖,这样,程序无法直接迁移到领一个依赖注入容器。
使用Spring,程序几乎将所有重要对象的创建工作移交给了Spring,并配置如何注入依赖。
1.1 XML配置文件
1.2 Spring控制反转容器的使用
1.2.1通过构造器创建一个bean实例
1.2.2通过工厂方法创建一个bean实例
1.2.3Destroy Method的使用
1.2.4向构造器传递参数
1.2.5Setter方式依赖注入
1.2.6构造器方式依赖注入
以上是关于Spring框架的主要内容,如果未能解决你的问题,请参考以下文章
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
初识Spring源码 -- doResolveDependency | findAutowireCandidates | @Order@Priority调用排序 | @Autowired注入(代码片段
使用实体框架迁移时 SQL Server 连接抛出异常 - 添加代码片段
Spring boot:thymeleaf 没有正确渲染片段
What's the difference between @Component, @Repository & @Service annotations in Spring?(代码片段
spring练习,在Eclipse搭建的Spring开发环境中,使用set注入方式,实现对象的依赖关系,通过ClassPathXmlApplicationContext实体类获取Bean对象(代码片段