没有状态变化的对象(无状态对象):应当做成单例。
Spring-framework的下载:http://repo.spring.io/release/org/springframework/spring/。
配置Spring环境(Spring Context)所需要的jar包,以及它们之间的相互依赖关系:
Spring基础配置:
- IoC容器:控制反转(或者从另一个角度叫依赖注入)。
- AOP面向切面编程:分离横切逻辑。
- 声明式事务。
IoC容器 —— 控制反转(容器接管对象的管理以及对象间的依赖关系) —— Xml配置(<beans>的名称空间必须添加,不然会报错,如下):
<?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="ctest" class="test.CTest"> <property name="value" value="10000" /> </bean> <bean id="mytest" class="test.MyTest"> <property name="it" ref="ctest" /> </bean> </beans>
IoC依赖注入 —— 通过容器,根据配置注入依赖属性:
测试代码:
beans(接口与实现):
//接口 package test; public interface ITest { public void print(); } //接口实现 package test; public class CTest implements ITest { private int value; @Override public void print() { System.out.println(value); } public int getValue() { return value; } public void setValue(int value) { this.value = value; } }
依赖注入 —— 获取bean(有两种方法):
package test; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MyTest { private static ApplicationContext context = null; //方法一:通过配置依赖关系,然后用getter、setter操作bean(这种方式只适用于static bean) //这里就体现了IoC的解耦和,即依赖关系由IoC管理。 //分离了关注点:分开了,接口的实现和具体使用哪个接口的选择,以及其使用无需在此关心接口采用的哪一个实现 private static ITest it = null; public ITest getIt() { return it; } public void setIt(ITest it) { this.it = it; } @BeforeClass public static void setUpBeforeClass() { System.out.println("hello"); context = new ClassPathXmlApplicationContext("app.xml"); } @AfterClass public static void tearDownAfterClass() { System.out.println("goodbye"); if(context instanceof ClassPathXmlApplicationContext) { ((ClassPathXmlApplicationContext) context).destroy(); } } /** * 测试获取bean的第一种方法: */ @Test public void testOne() { it.print(); } /** * 测试第二种方法:getBean */ @Test public void testTwo() { //方法二:直接通过getBean方法,获得某个bean // ITest itest = context.getBean(CTest.class); ITest itest = (ITest) context.getBean("ctest"); itest.print(); } }
AOP面向切面编程:
时间: 2024-10-25 00:27:01