重温Spring之旅1——控制反转IOC与依赖注入DI
来源:互联网 发布:公共网络摄像头 编辑:程序博客网 时间:2024/06/15 02:24
Spring介绍:
- Spring是一个非常活跃的开源框架;它是一个基于IOC和AOP来构架多层JavaEE系统的框架,它的主要目地是简化企业开发。
- Spring以一种非侵入式的方式来管理你的代码,Spring提倡”最少侵入”,这也就意味着你可以适当的时候安装或卸载Spring 。
Spring的模块介绍:
Spring 框架是一个分层架构,它包含一系列的功能要素,并被分为大约20个模块。这些模块分为Core Container、Data Access/Integration、Web、AOP(Aspect Oriented Programming)、Instrumentation和测试部分,
如下图所示:
什么是控制反转(IOC)?
IOC就是 Inversion of Control
public class Girl {
private Boy boy = new Boy();
public void kiss(){
System.out.println(boy.getBoyObject());
}
}
boy是在应用内部创建及维护的。所谓控制反转就是应用本身不负责依赖对象的创建及维护,依赖对象的创建及维护是由外部容器负责的。这样控制权就由应用转移到了外部容器,控制权的转移就是所谓反转,目的是为了获得更好的扩展性和良好的可维护性。
到http://www.springsource.org/download下载spring,然后进行解压缩,在解压目录中找到下面jar文件,拷贝到类路径下。
* org.springframework.asm-3.0.2.RELEASE.jar
Spring独立的asm程序, Spring2.5.6的时候需要asmJar包,3.0开始提供他自己独立的asmJar。
* org.springframework.beans-3.0.2.RELEASE.jar
所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。
* org.springframework.context-3.0.2.RELEASE.jar
Spring提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等。
* org.springframework.core-3.0.2.RELEASE.jar
包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。
* org.springframework.expression-3.0.2.RELEASE.jar
Spring表达式语言。
* org.apache.commons.logging-1.1.1.jar(spring-framework-3.0.2.RELEASE-dependencies)
第三方的主要用于处理日志。
所有应用都要用到的,它包含访问配置文件、创建和管理bean以及进行Inversion of Control / Dependency Injection(IoC/DI)操作相关的所有类。
* org.springframework.context-3.0.2.RELEASE.jar
Spring提供在基础IoC功能上的扩展服务,此外还提供许多企业级服务的支持,如邮件服务、任务调度、JNDI定位、EJB集成、远程访问、缓存以及各种视图层框架的封装等。
* org.springframework.core-3.0.2.RELEASE.jar
包含Spring框架基本的核心工具类,Spring其它组件要都要使用到这个包里的类,是其它组件的基本核心。
* org.springframework.expression-3.0.2.RELEASE.jar
Spring表达式语言。
* org.apache.commons.logging-1.1.1.jar(spring-framework-3.0.2.RELEASE-dependencies)
第三方的主要用于处理日志。
例子:
Boy.java
package com.csii.a.ioc;public class Boy {public Boy() {super();System.out.println("这是boy的构造方法");}public void display(){System.out.println("我就是我。不一样的男孩");}}beans.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-3.0.xsd"> <!-- 由spring容器创建Boy,此时IOC id:为Boy对象命名 class:初始化的类(全路径) spring底层: Map<String,Object> map = new HashMap<String,Object>(); map.put("boy",Class.forName("com.csii.a.ioc.Boy").newInstance()); --><bean id="boy" class="com.csii.a.ioc.Boy"></bean></beans>
测试类App.java
package com.csii.a.ioc;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class App {public static void main(String[] args) {ApplicationContext ctx = new ClassPathXmlApplicationContext("/com/csii/a/ioc/beans.xml");Boy boy = (Boy) ctx.getBean("boy");boy.display();}}
什么是依赖注入(DI)?
DI就是Dependency Injection
当我们把依赖对象交给外部容器负责创建,那么Girl类可以改成如下:
public class Girl{
private Boy boy;
public void kiss(){
System.out.println(boy.getBoyObject());
}
}
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
public class Girl{
private Boy boy;
public void kiss(){
System.out.println(boy.getBoyObject());
}
}
所谓依赖注入就是指:在运行期,由外部容器动态地将依赖对象注入到组件中。
例子:
Boy.java
package com.csii.b.di;public class Boy {public Boy() {super();System.out.println("这是boy的构造方法");}public void display(){System.out.println("我就是我。不一样的男孩");}}Girl.java
package com.csii.b.di;public class Gril {private Boy boy;public Boy getBoy() {return boy;}public void setBoy(Boy boy) {System.out.println("这是setBoy的方法:"+boy);this.boy = boy;}public Gril() {super();System.out.println("这是Gril的构造方法");}public void kiss(){boy.display();}}beans.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-3.0.xsd"> <!-- 由spring容器创建Boy,此时IOC id:为Boy对象命名 class:初始化的类(全路径) spring底层:Map<String,Object> map map.put("boy",Class.forName("com.csii.b.di.Boy").newInstance()) --><bean id="boy" class="com.csii.b.di.Boy"></bean><!--传递boy对象给gril,这个过程由spring容器处理,此时DI* property name="":Gril对象的属性* ref:注入对象,可将Boy对象注入给Gril对象中的属性--><bean id="gril" class="com.csii.b.di.Gril"><property name="boy" ref="boy"></property></bean></beans>App.java
package com.csii.b.di;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import org.springframework.context.support.FileSystemXmlApplicationContext;public class App {public static void main(String[] args) {/** * 当spring容器启动后,因为spring容器可以管理bean对象的创建,销毁等生命周期, * 所以我们只需从容器直接获取Bean对象就行,而不用编写一句代码来创建bean对象。 *///通过路径的形式加载,使用类路径的形式加载,将bean.xml放置到src目录下ApplicationContext ctx = new ClassPathXmlApplicationContext("beans.xml");Gril gril = (Gril) ctx.getBean("gril");gril.kiss();}}
实例化Spring容器的方式:
实例化Spring容器常用的两种方式:
方法一:
在类路径下寻找配置文件来实例化容器ApplicationContext ctx = new ClassPathXmlApplicationContext(new String[]{"beans.xml"});
可以在整个类路径中寻找xml文件:
- 通过这种方式加载。需要将spring的配置文件放到当前项目的classpath路径下。
- classpath路径指的是当前项目的src目录,该目录是java源文件的存放位置。
方法二:
在文件系统路径下寻找配置文件来实例化容器ApplicationContext ctx = new FileSystemXmlApplicationContext(new String[]{“d:\\beans.xml“});
Spring的配置文件可以指定多个,可以通过String数组传入。
为何要使用Spring?
至少在我看来,在项目中引入spring立即可以带来下面的好处:
![](http://img.blog.csdn.net/20161225183111729?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYnR0MjAxMw==/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
- 降低组件之间的耦合度,实现软件各层之间的解耦。
- 可以使用容器提供的众多服务,如:事务管理服务、消息服务等等。当我们使用容器管理事务时,开发人员就不再需要手工控制事务.也不需处理复杂的事务传播。
- 容器提供单例模式支持,开发人员不再需要自己编写实现代码。
- 容器提供了AOP技术,利用它很容易实现如权限拦截、运行期监控等功能。
- 容器提供的众多辅作类,使用这些类能够加快应用的开发,如: JdbcTemplate、 HibernateTemplate。
- Spring对于主流的应用框架提供了集成支持,如:集成Hibernate、JPA、Struts等,这样更便于应用的开发。
使用Spring的好处:
当使用spring时,我们可以使用容器提供的众多服务:
0 0
- 重温Spring之旅1——控制反转IOC与依赖注入DI
- Spring学习之——控制反转(IoC)与依赖注入(DI)
- Spring 控制反转IOC,依赖注入DI
- Spring 控制反转(IoC)容器与依赖注入(DI)
- Spring控制反转与依赖注入(IOC && DI)
- Spring入门--控制反转(IOC)与依赖注入(DI)
- Spring 控制反转(IOC)与依赖注入(DI)
- Spring入门--控制反转(IOC)与依赖注入(DI)
- Spring之IOC(控制反转)\DI依赖注入
- Helloworld之Spring依赖注入/控制反转(DI/IoC)版
- 控制反转(IoC)与依赖注入(DI)
- 控制反转IOC与依赖注入DI
- 控制反转(IoC)与依赖注入(DI)
- 控制反转IOC与依赖注入DI
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI
- 控制反转(IoC)与依赖注入(DI)
- 控制反转(IoC)与依赖注入(DI)
- MAD
- 栈的应用-四则运算表达式求值
- 000
- 常量与变量、静态变量与实例变量
- ZCMU—1720
- 重温Spring之旅1——控制反转IOC与依赖注入DI
- 迷宫问题
- 优化SQL查询:如何写出高性能SQL语句
- 算法训练 动态数组使用
- Android走进Framework之app是如何被启动的
- 解析配置文件 redis.conf
- 哈希表(二)(散列)开放定址法(平方)
- Makefile的详细解析<一>
- 使用JSON