一、Spring是什么?
Spring是一个框架,Java不死的原因是因为Java有Spring这个非常强大的技术框架的支持,而且他是一个轻量级的Java开发框架
二、什么是IOC?
一、IOC的意思:控制反转(全称Inversion of Control)
他是一个重要的面向对象编程的法则来消减计算机程序的耦合问题,也是轻量级的Spring框架的核心
那么如何理解这句话呢?
第一种理解:将组建对象的控制权从代码本身转移到外部容器
第二种理解:将创建对象实力的控制权从代码控制剥离到IOC容器控制
二、案例
引入jar包(引节点)
<!--Spring--> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.2.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.2.0.RELEASE</version> </dependency> <!--aop使用的jar--> <dependency> <groupId> org.aspectj</groupId > <artifactId> aspectjweaver</artifactId > <version> 1.8.7</version > </dependency>
里面一共有五个jar包(前两个节点有两个jar包)
创建一个类。
package demo01; import java.util.StringTokenizer; ** * Create Time: 2018年03月05日 16:28 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ public class HappyService { private String info; private Integer age; public HappyService(){ System.out.println("======HappyService"); } public void work(){ System.out.println("我是"+info); } public String getInfo() { return info; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public void setInfo(String info) { this.info = info; } }
写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 id="service" class="demo01.HappyService"> <property name="info" value="第一个Spring项目"></property> <property name="age" value="10"></property> </bean> </beans>
测试类:
import demo01.HappyService; import demo03.printer.Printer; import demo03.printer.Printer; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Create Time: 2018年03月05日 16:35 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ public class Test20180303 { @Test public void t1(){ ApplicationContext context=new ClassPathXmlApplicationContext("applicationContext.xml"); HappyService service =(HappyService) context.getBean("service"); service.work(); } }
测试结果:
====HaapyService 我是第一个Sring项目
三、什么是DI
Dependency Injection 依赖 注入 给对象注入属性值
IOC和DI的区别:
IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件控制,侧重于原理。
DI依赖注入:说的是创建对象实例时,为这个对象注入属性值或其它对象实例,侧重于实现。它们是spring核心思想的不同方面的描述。
案例 打印机
1.编写墨盒接口
package cn.spring.day03printer.ink; //磨盒的接口 public interface Ink { public String getColor(); }
2.两个种墨盒
package cn.spring.day03printer.ink; /** * Create Time: 2018年03月05日 20:03 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ public class BlackInk implements Ink { //黑白墨盒 public String getColor() { return "BlackIkn"; } }
package cn.spring.day03printer.ink; /** * Create Time: 2018年03月05日 20:07 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ //彩色墨盒 public class ColorInk implements Ink { public String getColor() { return "ColorIkn"; } }
3.纸张接口和他的实现类
package cn.spring.day03printer.paper; //纸张 public interface Paper { public String getPaprSize(); }
package cn.spring.day03printer.paper; /** * Create Time: 2018年03月05日 20:13 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ //A4纸 public class A4aper implements Paper { public String getPaprSize() { return "A4paper"; } }
package cn.spring.day03printer.paper; /** * Create Time: 2018年03月05日 20:15 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ //B5的纸 public class B5Paper implements Paper { public String getPaprSize() { return "B5Paper"; } }
4.编写打印机类
package cn.spring.day03printer.printer; import cn.spring.day03printer.ink.Ink; import cn.spring.day03printer.paper.Paper; /** * Create Time: 2018年03月05日 20:18 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ //打印机 public class Printer { private Ink ink; private Paper paper; public void print(){ System.out.println("使用"+paper.getPaprSize()+"\t"+ink.getColor()+"墨盒,打印"); } public Ink getInk() { return ink; } public void setInk(Ink ink) { this.ink = ink; } public Paper getPaper() { return paper; } public void setPaper(Paper paper) { this.paper = paper; } }
5.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"> <!--在Spring中定制一个Ink--> <bean id="ink" class="cn.spring.day03printer.ink.ColorInk"> </bean> <bean id="paper" class="cn.spring.day03printer.paper.A4aper"> </bean> <bean id="printer" class="cn.spring.day03printer.printer.Printer"> <property name="paper" ref="paper"></property> <property name="ink" ref="ink"></property> </bean> </beans>
6.测试类
import cn.spring.day03printer.printer.Printer; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; /** * Create Time: 2018年03月05日 20:29 * C@author 张晓北 * My motto :Do not , for one repulse , give up the purpose that you resolved to effect **/ public class Text03 { @Test public void t1(){ ApplicationContext contest=new ClassPathXmlApplicationContext("applicationContext-day03printer.xml"); Printer printer=(Printer)contest.getBean("printer"); printer.print(); } }
运行结果:
三月 07, 2018 20:32:25 下午 org.springframework.context.support.ClassPathXmlApplicationContext prepareRefresh
信息: Refreshing org.springframework.context.support.ClassPathXmlApplicationContext@7c883540: startup date [Wed Mar 07 19:51:25 CST 2018]; root of context hierarchy
三月 07, 2018 20:32:25 下午 org.springframework.beans.factory.xml.XmlBeanDefinitionReader loadBeanDefinitions
信息: Loading XML bean definitions from class path resource [applicationContext-day03printer.xml]
使用A4paper ColorIkn墨盒,打印
Process finished with exit code 0