Spring框架
概述:Spring 是最受欢迎的企业级 Java 应用程序开发框架,数以百万的来自世界各地的开发人员使用 Spring 框架来创建性能好、易于测试、可重用的代码。
Spring 是轻量级的框架,其基础版本只有 2 MB 左右的大小。
一:IOC(Inversion of Control)
即“控制反转”,不是什么技术,而是一种设计思想。在Java开发中,Ioc意味着将你设计好的对象交给容器控制,而不是传统的在你的对象内部直接控制。
在传统的Java项目中,是通过一个类new另一个类的对象,将两个类进行关联,这样的话是程序主动去创建依赖对象,这样的话会导致类与类之间的高耦合,难于测式。
而IOC是把创建和查找依赖对象的控制权交给了容器,由容器进行注入组合对象,由这个容器来管理对象的生命周期和对象之间的关联关系,这样的话不但实现了对象之间的关联关系,所以对象与对象之间是 松散耦合,这样也方便测试,利于功能复用,更重要的是使得程序的整个体系结构变得非常灵活。
二:DI(Dependency Injection)
即“依赖注入”:IOC和DI在本质上来说是同一种东西,只不过IOC是一种设计理论,而DI则是一种实现。
组件之间依赖关系由容器在运行期决定,形象的说,即由容器动态的将某个依赖关系注入到组件之中。依赖注入的目的并非为软件系统带来更多功能,而是为了提升组件重用的频率,并为系统搭建一个灵活、可扩展的平台。通过依赖注入机制,我们只需要通过简单的配置,而无需任何代码就可指定目标需要的资源,完成自身的业务逻辑,而不需要关心具体的资源来自何处,由谁实现。
IoC的一个重点是在系统运行中,动态的向某个对象提供它所需要的其他对象。这一点是通过DI(Dependency Injection,依赖注入)来实现的
三、Spring使用初始案例
1、先在pom.xml文件中导入Spring依赖
2、创建项目实体类(一个类都是一个Bean)
StudentBean实体类
3、创建resources文件夹并创建applicationContext.xml文件
applicationContext.xml文件内容如下
4、Test测试类
5、运行结果如下
四、Spring域属性案例
1、在上个案例的基础上添加一个实体类Techer类
2、在StudentBean类中添加Techer对象
3、在applicationContext.xml中配置
4、Test测试类
5、运行结果如下
五、打印机案例
1、创建Ink墨盒接口并定义获取墨盒颜色的方法
package com.spring.Ink;
/**
* Ink墨盒接口
*/
public interface Ink {
//获取墨盒颜色
public String getInk();
}
2、分别创建彩色墨盒(ColorInk)和黑白墨盒(GrayInk)
package com.spring.Ink;
import com.spring.Ink.Ink;
public class ColorInk implements Ink {
@Override
public String getInk() {
return "彩色";
}
}
package com.spring.Ink;
import com.spring.Ink.Ink;
public class GrayInk implements Ink {
@Override
public String getInk() {
return "黑白色";
}
}
3、创建Paper纸张接口并定义获取纸张大小的方法
package com.spring.paper;
public interface Paper {
//获取纸张大小
public String getPaper();
}
4、分别创建A4(A4Paper)和B5(B5Paper)类
package com.spring.paper;
public class A4Paper implements Paper {
@Override
public String getPaper() {
return "A4";
}
}
package com.spring.paper;
public class B5Paper implements Paper {
@Override
public String getPaper() {
return "B5";
}
}
5、创建打印机类(Printer)
package com.spring.printer;
import com.spring.Ink.Ink;
import com.spring.paper.Paper;
/**
* 打印机类
*/
public class Printer {
//纸张对象
private Paper paper;
//墨盒对象
private Ink ink;
//打印的方法
public void print(){
System.out.println("你正在使用"+paper.getPaper()+"纸张和"+ink.getInk()+"墨盒打印信息!");
}
public Paper getPaper() {
return paper;
}
public void setPaper(Paper paper) {
this.paper = paper;
}
public Ink getInk() {
return ink;
}
public void setInk(Ink ink) {
this.ink = ink;
}
}
6、applicationContext.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.xsd">
<!--注入彩色墨盒 Bean的注入都是实现类-->
<bean id="colorink" class="com.spring.Ink.ColorInk"></bean>
<bean id="grayInk" class="com.spring.Ink.GrayInk"></bean>
<!--注入纸张 Bean的注入都是实现类-->
<bean id="a4Paper" class="com.spring.paper.A4Paper"></bean>
<bean id="b5Paper" class="com.spring.paper.B5Paper"></bean>
<!--打印机类 将纸张和墨盒组合起来-->
<bean id="printer" class="com.spring.printer.Printer">
<property name="ink" ref="colorink"></property>
<property name="paper" ref="a4Paper"></property>
</bean>
</beans>
7、Test测试类
package com.spring.test;
import com.spring.printer.Printer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class PrinterText {
public static void main(String[] args) {
ApplicationContext ctx=new ClassPathXmlApplicationContext("applicationContext.xml");
Printer printer =(Printer) ctx.getBean("printer");
printer.print();
}
}
8、运行结果如下