`
- 浏览:
44343 次
- 性别:
- 来自:
北京
-
Spring框架的核心就是控制反转(Inversion of Control)和依赖注入(Dependency Injection),通过这两方面来实现松耦合。
[size=x-small][/size][align=center][/align]
使用IoC,对象是被动的接受依赖类,而不是自己主动的去找。容器在实例化的时候主动将它的依赖类注入给它。可以这样理解:控制反转将类的主动权转移到接口上,依赖注入通过xml配置文件在类实例化时将其依赖类注入。通过下面的实例来逐步的理解:
首先假设有一个需求,类Business需要调用类Dependency的方法f(),按照日常的做法,得到下面的代码:
//**类Dependency**
public class Dependency {
public void f() {};
}
//**类Business**
public class Business {
Dependency d;
public Business() {
d = new Dependency();
}
public void doSth() {
d.f();
}
}
对上述实现做出如下修改:
首先,将Business里的Dependency实例的获得该为setter方式,其次,将Dependency类改为某个接口的实现。故可以得到下面新的代码:
//**接口IDependency**
public interface IDependency {
void f();
}
//**类Dependency**
public class Dependency {
public void f() {};
}
//**类Business**
public class Business {
IDependency d;
public Business() {}
public void doSth() {
d.f();
}
public void setDependency(IDependency d) {
this.d = d;
}
}
在新的代码中,首先Business的变量d可以接收任何IDependency的实例,另外,Dependency的实例不是通过Business来获得,而是通过setter(也可以用构造器)来由外部传给它。这似乎跟我们往常的代码没什么不同,但这已经是一个良好的设计。关键就是Dependency的实例如何从外部注入给Business呢?
这就要通过xml来实现了。
创建一个SpringFirst.xml,进行简单的配置:
<beans>
<bean id = "dependency" class = "aopfirst.business.Dependency" />
<bean
id = "business"
class = "aopfirst.business.Business"
>
<property name = "dependency">
<ref bean = "dependency" />
</property>
</bean>
</beans>
这个配置文件里将Dependency类和Business类加入,并将Dependency作为Business的一个参数。
单有了这个xml文件还不够,还需要一个测试类来加载该xml文件,spring提供了现成的API,在加载上面的xml的时候,就进行了如下工作:实例化Dependency类,实例化Business类,并将Dependency的实例作为参数赋给了Business实例的
setDependency()方法。下面是该测试程序:
public class StartServer {
public static void main(String [] args) {
ClassPathResource cr = new ClassPathResource("SpringFirst.xml");
BeanFactory factory = new XmlBeanFactory(cr);
Business b = (Business)factory.getBean("business");
b.doSth();
}
}
上面的程序加载了xml以后,获得id为"business"的bean,即Business类的实例,并调用了其doSth()方法。由此可见,Business的依赖类Dependency是通过xml来注入的,而且Business是通过接口IDependency来接收Dependency实例。因此,当我们又有新的IDependency的实现时,只需要修改xml文件即可,测试程序只需要根据xml里的id值来获得需要的参数。
总结上面的例子,对控制反转和依赖注入已经能理解了。依赖类(Dependency)是通过外部(xml)来注入的,而不是由使用它的类(Business)来自己制造,这就是依赖的注入。另一方面,Business对类Dependency的依赖转移到对接口IDependency的依赖,控制权由类转移到了接口,即由"实现"转移到"抽象"中。这就是控制反转。
分享到:
Global site tag (gtag.js) - Google Analytics
相关推荐
本资料“认识微服务springcloud.rar”是针对初学者的快速开发入门级文档,特别适合那些想要深入理解并应用Spring Cloud进行互联网开发的工程师。 首先,让我们来了解一下微服务架构的核心理念。微服务架构是一种将...
### Spring Boot、Spring Cloud、Spring Boot Alibaba及其配套组件版本关系详解 #### 一、引言 ...通过本文的分析,希望能够帮助开发者们更加清晰地认识到各个版本之间的差异和兼容性,从而做出更合理的决策。
黑马程序员-SpringCloud-学习笔记01-认识微服务
第1章认识Spring 第2章Spring入门 第3章Bean、消息、事件 第4章SpringAOP 第5章JDBC、事务支持 第6章Hibernate与Spring 第7章SpringWebMVC框架 第8章View层方案、Web框架整合 第9章API封装 第10章项目:...
在Spring Boot中,"快速入门"通常指的是新手或初学者对Spring Boot的基本认识和基础使用,能够快速构建和部署一个Spring Boot应用程序。 ### Spring Boot概述 #### 1.1. 什么是Spring Boot Spring Boot是Spring...
零基础认识 Spring Boot
**认识TestNG** TestNG是一个用于Java应用程序的自动化测试框架,由Cédric Beust创建。它允许定义测试套件,分组测试,执行异步测试,并提供详细的测试报告。TestNG引入了如注解、XML配置文件、监听器和报告功能,...
《精通 Spring Boot 42 讲》共分五大部分,第一部分是从零起步的基础内容,共4课,帮助大家快速认识 Spring Boot ,我会带领大家熟悉 Spring Boot 产生的背景和设计理念,同时也会讲解 Spring Boot 的环境搭建和项目...
通过本教程,你应该对Spring框架有了初步的认识,了解了其核心的IoC和DI机制。接下来,你可以深入学习Spring的其他模块,如数据访问、事务管理、AOP等,以提升你的Java开发技能。记住,掌握Spring不仅可以提高开发...
本合集深入剖析了Spring的诸多关键特性,包括依赖注入、配置类解析、Bean生命周期管理、以及与MyBatis的整合等,旨在帮助读者构建起对Spring全面而深入的认识。 1. **依赖注入源码解析**:在"06-Spring之依赖注入...
1.1.1 重新认识Spring 2 1.1.2 Spring Boot精要 3 1.1.3 Spring Boot不是什么 6 1.2 Spring Boot入门 6 1.2.1 安装Spring Boot CLI 7 1.2.2 使用Spring Initializr初始化Spring Boot项目 10 1.3 小结 ...
通过这五个章节的学习,你将对Spring有一个全面的认识,能够熟练地使用Spring框架进行开发,无论是基本的Bean管理,还是更高级的AOP和数据库操作,甚至是集成ORM框架。这些知识将为你的软件开发事业打下坚实的基础。
Spring AOP(面向切面编程)是Spring框架的核心特性之一,它允许开发者在不修改源代码的情况下,通过...这个例子提供了学习Spring AOP实际操作的宝贵资源,通过阅读源码和运行测试,你将对Spring AOP有更全面的认识。
首先认识下Spring的结构 ![架构图](http://www.ibm.com/developerworks/cn/java/j-lo-spring-principle/image001.gif) 然后我们皆可以写我们的demo了 ### 我们的Bean类 对于bean的理解,希望大家是把他看成...
3、对spring aop认识模糊的,不清楚如何实现Java 自定义注解的 4、想看spring aop 注解实现记录系统日志并入库等 二、能学到什么 1、收获可用源码 2、能够清楚的知道如何用spring aop实现自定义注解以及注解的逻辑...
标题 "spring-cglib-repack-3.2.0.jar" 和 "spring-objenesis-2.2.jar" 指的是两个在Spring框架源代码...对这两个库的理解有助于提升对Spring框架整体运作机制的认识,对于开发和维护基于Spring的应用程序非常重要。
要使 Spring 认识该控制器类,需要将其交给 Spring 来管理,方法有两种:一种是定义 MyController 的 bean 对象,另一种是告诉 Spring 该到哪里去找标记为@Controller 的 Controller 控制器。 2. @RequestMapping ...
1. **Spring概述**:首先介绍Spring的发展历程、核心理念以及在现代软件开发中的地位,让读者对Spring有一个整体的认识。 2. **环境配置**:详细阐述如何搭建Spring开发环境,包括安装JDK、设置开发工具(如IDEA或...
**Spring Security ...通过这个小 demo,你可以对 Spring Security 有初步的认识,了解如何在 SSM 项目中集成和配置它,为实际项目中的安全需求打下基础。继续深入学习,你将掌握更复杂的访问控制策略和定制化技巧。