Spring是一个轻型框架,这应该不是说它的功能小,而是它的功能是可选的。如下图:
spring的core核心提供了spring框架的基本功能。包括BeanFactory,它是spring容器的基础,也是spring依赖注入的基础。
所有spring的应用上下文都是建立在核心框架上面(core)。这种模型使spring可以支持很多企业应用服务,如email、JNDI access、EJB intergration、remoting等等。
spring的依赖注入(dependency injection)在2004年之后也叫做控制反转(inversion of control)。其最大的优势是低耦合,如在下面可以简单说明依赖注入的例子:首先我们定义一个HelloWordService接口
public interface HelloWordService{
void sayHello()}
在HelloWord中实现这个接口
public class HelloWord implements HelloWordService{
private string greeting;
public HelloWord(){}
public HelloWord(String greetin){
this.greeting = greeting;
}
public void setGreeting(String greeting){
this.greeting = greeting;
}
public void sayHello(){
System.out.print(greeting);
}
}
在spring的xml配置文件中还要增加hello.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean id="helloWordService"
class="com.test.HelloWord">
<property name="greeting" value="test DI" />
</bean>
</beans>
spring的依赖注入一般有两种方法,一在构造方法中注入,二是在setter方法中注入(如本例)。
Foo类定义了Bar接口时,那Foo就并不用关心Bar的实现类,Bar的实现类可以是本地POJO、远程web服务、EJB等,而Foo类并不知道也不用关心。
BeanFactory是spring容器的基础,如使用XmlBeanFactory读取hello.xml:
import org.springframework.beans.factory.BeanFactory;
import org.springframework.beans.factory.xml.XmlBeanFactory;
import org.springframework.core.io.FileSystemResource;
public class HelloApp {
public static void main(String[] args) throws Exception {
BeanFactory factory =
new XmlBeanFactory(new FileSystemResource("hello.xml"));
HelloWordService hello=
(HelloWordService) factory.getBean("helloWordService");
hello.sayHello();
}
}
然而追求低耦合也不是完美的,如低耦合的代码更难测试、重用也有困难、更难理解、特别也会出现这样的情况“解决了一个bug而带来了一个或者多个bug”。
分享到:
相关推荐
Spring依赖注入(Dependency Injection,简称DI)是Java应用开发中常用的设计模式,它极大地提高了代码的可测试性和可维护性。在Spring框架中,依赖注入是核心特性之一,通过控制反转(Inversion of Control,IoC)...
Spring依赖注入机制,也被称为控制反转(Inversion of Control,IOC),是Spring框架的核心特性,它使得应用程序的组件之间能够实现松散耦合。在传统编程中,对象通常自行创建和管理它们所依赖的其他对象,而在...
本篇学习笔记将深入剖析Spring依赖注入的原理,通过源码分析帮助我们理解这一核心机制。 首先,依赖注入允许我们解耦组件之间的关系,使得各个组件可以独立地进行开发、测试和维护。在Spring中,DI主要通过两种方式...
Spring 依赖注入原理与用法实例分析 Spring 依赖注入是 Spring 框架中的一种设计模式,它允许组件之间松散耦合,提高了系统的灵活性和可维护性。本文将详细介绍 Spring 依赖注入的原理与用法,通过实例分析,帮助...
浅谈Spring IoC容器的依赖注入原理 Spring IoC容器的依赖注入原理是Spring框架的核心机制之一,负责将服务对象(Bean)实例化并将其提供给客户端使用。依赖注入原理可以分为两个阶段:IoC容器初始化和Bean实例化。 ...
通过阅读和理解这些源码,你可以更深入地了解Spring依赖注入的工作原理及其在项目中的具体使用。 在进行依赖注入时,Spring使用BeanFactory或ApplicationContext作为容器,负责创建、管理和装配Bean。容器读取配置...
本文将深入探讨Spring依赖注入的概念、工作原理以及如何在实际项目中应用。 依赖注入(Dependency Injection,简称DI)是一种设计模式,它允许组件之间通过外部源来管理其依赖关系,而不是由组件自己来创建或查找...
本文将深入解析Spring中的依赖注入原理,帮助开发者更好地理解和应用这一核心功能。 依赖注入(Dependency Injection,简称DI)是Spring框架的核心之一,它允许组件之间的依赖关系在运行时由外部容器来管理,而不是...
### Spring IoC与注解依赖注入详解 #### 一、Spring框架简介 Spring框架是由Rod Johnson创建的一个开源项目,最初是为了解决企业级应用开发中的复杂性问题而诞生的。Spring框架的核心特性包括IoC(Inversion of ...
下面我们将深入探讨Spring依赖注入的概念、工作原理以及如何在实践中应用。 1. **依赖注入概念**: - 依赖:一个类对另一个类的使用称为依赖。 - 注入:将依赖的对象传递给需要它的类,而不是由类自己去创建或...
在Spring框架中,依赖注入(Dependency Injection,简称DI)是一种重要的设计模式,它极大地提高了代码的可测试性和可维护性。模拟Spring的依赖注入,旨在理解其核心机制,让我们一起深入探讨这一主题。 首先,我们...
Spring框架是Java开发中不可或缺的一部分,它通过提供依赖注入(Dependency Injection,简称DI)和面向切面编程(Aspect-Oriented Programming,简称AOP)等核心功能,极大地简化了企业级应用的开发工作。...
在IT行业中,Spring框架是Java开发中的一个基石,尤其在控制反转(IoC)和依赖注入(DI)方面。依赖注入是一种设计模式,它允许我们解耦组件,提高代码的可测试性和可维护性。Spring框架通过IoC容器来实现DI,让我们...
在传统的软件设计中,对象的创建和依赖关系的维护通常由代码自身来完成,而在Spring Ioc中,这些控制权被反转给了Spring容器,使得对象的生命周期管理和依赖注入变得更为灵活和可扩展。 **一、控制反转(IoC)概念*...
本文将深入探讨Spring如何通过读取配置文件实现依赖注入,并讲解相关源码,帮助理解其工作原理。 在Spring中,配置文件通常为XML格式,如`applicationContext.xml`,它定义了bean的实例化、属性设置、装配关系等。...
在"spring依赖注入原理"的案例中,我们可能会学习如何定义和使用这些注入方式,以及如何在实际项目中有效地管理和控制依赖关系。理解并熟练掌握依赖注入,不仅可以帮助我们编写更高质量的代码,还能使我们的应用程序...
在Spring 4版本中,泛型依赖注入是一项重要的特性,它极大地提高了代码的灵活性和可维护性。本笔记将深入探讨SSH中的Spring框架如何实现泛型依赖注入。 首先,我们来理解泛型的基本概念。泛型是Java SE 5引入的一种...
Spring 依赖注入:@Autowired,@Resource 和@Inject 区别与实现原理 Spring 依赖注入是指在应用程序中将对象之间的依赖关系自动装配的过程。Spring 框架提供了多种依赖注入方式,包括 @Autowired、@Resource 和@...
### Spring注入原理详解 在Java开发领域,Spring框架无疑占据着举足轻重的地位,尤其在企业级应用中,Spring的依赖注入(Dependency Injection,DI)特性极大地简化了对象之间的依赖管理,使得代码更加模块化、可...