开源框架Spring详解---IoC控制反转(一)
spring在英文里有春天、弹簧、跳跃和泉眼的意思。Spring 也表示是一个开源框架,是为了解决企业应用程序开发复杂性由Rod Johnson创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring是一个开源框架,它由Rod Johnson创建。它是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器框架。
下面就搭建一个简单的Spring项目:
1、首先要引入Spring的jar包。
Spring有两个jar包:
2、然后写一个xml文件,这个xml文件可以随便起名字,但是Spring的官方网站就是写的是applicationContext.xml.所以我们最好也写成application.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 指明bean id class property属性 value属性值 加载这个文件的时候 进行初始化 (需要根据bean的配置)--> <bean id="greetingServiceImpl" class="cn.csdn.service.GreetingServiceImpl"> <!-- 通过构造器参数的索引位置匹配方法 索引位置从0开始 <constructor-arg index="0"> <value>z_xiaofei168</value> </constructor-arg> <constructor-arg index="1"> <value>你好!</value> </constructor-arg> --> <!-- 通过构造器的参数类型匹配方法进行注入 --> <constructor-arg type="java.lang.String"> <value>你好!</value> </constructor-arg> <constructor-arg type="java.lang.String"> <value>z_xiaofei168</value> </constructor-arg> <!-- 通过set方法进行注入,必须在你类中有对应的set方法 <property name="say"> <value>你好!</value> </property> --> </bean> </beans>
3、再次写service层:
GreetingService.java
package cn.csdn.service; public interface GreetingService { public void say(); }
GreetingServiceImpl.java
package cn.csdn.service; public class GreetingServiceImpl implements GreetingService { /**私有属性*/ private String say; /**在定义一个私有的属性*/ private String name; /** * IOC依赖注入的方式 * 2、通过构造器注入 * */ public GreetingServiceImpl(String name,String say){ this.name=name; this.say=say; } @Override public void say() { System.out.println("你给"+name+"打的招呼是:"+say); } /** * IOC依赖注入的方式 * 1、通过setter方法实现的 * */ /**set方法进行初始化的工作*/ public void setSay(String say){ this.say=say; } }
4、最后写个测试类来测试:
package cn.csdn.junit; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; import cn.csdn.service.GreetingService; public class GreetingTest { /**测试GreetingServiceImpl的方法*/ @Test public void test1(){ /**加载spring容器 可以解析多个配置文件 采用数组的方式传递*/ ApplicationContext ac = new ClassPathXmlApplicationContext(new String[]{"applicationContext.xml"}); /**IOC的控制反转体现*/ GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl"); greetingService.say(); } @Test public void test2(){ ApplicationContext ac = new FileSystemXmlApplicationContext(new String[]{"src/applicationContext.xml"}); /**IOC的控制反转体现*/ GreetingService greetingService = (GreetingService) ac.getBean("greetingServiceImpl"); greetingService.say(); } }
5、在控制台的显示结果是:
你给z_xiaofei168打的招呼是:你好!