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依赖注入原理进行了详细说明和解析,过程详实,思路清晰,便于新手理解和学习spring依赖注入的核心要义。
NULL 博文链接:https://matchless1688.iteye.com/blog/1038302
主要介绍了spring依赖注入原理与用法,结合实例形式分析了spring框架依赖注入的概念、原理、用法案例及相关操作注意事项,需要的朋友可以参考下
编码剖析Spring依赖注入的原理
详细阐明spring依赖注入工作原理,基于注解的一个完整例子,当然数据库需要自己去创建
主要介绍了浅谈Spring IoC容器的依赖注入原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
NULL 博文链接:https://coolszy.iteye.com/blog/512193
SSH笔记-泛型依赖注入,当继承类完毕之后,根据泛型依赖注入的特性,被继承类会参照继承类所引用了的其他的引用关系自动建立对应引用关系,这就是泛型依赖注入
NULL 博文链接:https://songwensheng.iteye.com/blog/629578
主要介绍了Spring.Net IOC依赖注入原理流程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
spring ioc容器初始化流程图 spring ioc容器依赖注入流程图 spring aop实现原理流程图
主要介绍了详解Spring依赖注入:@Autowired,@Resource和@Inject区别与实现原理,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
简单的Java依赖注入框架,代码量少,实现了依赖注入和AOP。适合Spring源码的初学者掌握其核心原理
自定义spring实现读取applicationContext.xml并依赖注入,可以参考学习控制反转的原理,非常简单。
spring dom4j 解析 依赖DI注入 ioc 反转 反射原理 反射技术
编程语言+JAVAspring+IoC容器+依赖注入**:这是一...它介绍了JAVAspring的IoC容器的概念、原理和作用,以及如何使用JAVAspring的IoC容器来实现依赖注入,包括设值注入和构造注入的方式,以及一些配置文件和注解的用法。
Spring IOC原理,类的继承关系,依赖注入和控制反转等关系
主要介绍了Spring bean的实例化和IOC依赖注入详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
Java的依赖注入已经是一个很常见的概念了,Spring框架主要就是解决了这一点,在PHP的laravel框架中,也出现了依赖注入的方式。 依赖注入就控制反转的一种是实现方式,面向对象的特征的重要体现,那么依赖注入中什么...