1、Spring框架簡介(摘自百度百科)
I 設置輸入方式
例如通過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="injectionService" class="me.timlong.spring.service.impl.InjectionServiceImpl">
<property name="injectionDAO" ref="injectionDAO"></property>
</bean>
<bean id="injectionDAO" class="me.timlong.spring.dao.impl.InjectionDAOImpl"></bean>
</beans>
IInjectionDAOImpl.java代碼:
package me.timlong.spring.dao.impl;
import me.timlong.spring.dao.IInjectionDAO;
public class InjectionDAOImpl implements IInjectionDAO {
@Override
public void save(String arg) {
//模擬數據庫保存操作
System.out.println("保存數據: " + arg);
}
}
InjectionServiceImpl.java代碼:
package me.timlong.spring.service.impl;
import me.timlong.spring.dao.IInjectionDAO;
import me.timlong.spring.dao.impl.InjectionDAOImpl;
import me.timlong.spring.service.IInjectionService;
public class InjectionServiceImpl implements IInjectionService {
private IInjectionDAO injectionDAO = new InjectionDAOImpl();
//設值注入
public void setinjectionDAO(IInjectionDAO idi) {
this.injectionDAO = idi;
}
//構造器注入
public InjectionServiceImpl(InjectionDAOImpl injectionDAO) {
this.injectionDAO = injectionDAO;
}
@Override
public void save(String arg) {
//模擬業務操作
System.out.println("Service接收參數:" + arg);
arg += ":" + this.hashCode();
this.injectionDAO.save(arg);
}
}
使用JUnit4測試代碼測試賦值注入:
測試類基類UnitTestBase.java代碼:
package me.timlong.spring.base;
import org.junit.After;
import org.junit.Before;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.util.StringUtils;
@RunWith(BlockJUnit4ClassRunner.class)
public class UnitTestBase {
private ClassPathXmlApplicationContext context;
private String springXmlPath;
public UnitTestBase(String path) {
this.springXmlPath = path;
}
@Before
public void before() {
if(StringUtils.isEmpty(springXmlPath)) {
springXmlPath = "classpath*:spring-*.xml";
}
context = new ClassPathXmlApplicationContext(this.springXmlPath);
context.start();
}
@After
public void after() {
context.destroy();
}
@SuppressWarnings("unchecked")
protected <T extends Object> T getBean(String beanId) {
return (T)context.getBean(beanId);
}
protected <T extends Object> T getBean(Class<T> clazz) {
return this.context.getBean(clazz);
}
}
測試類子類InjectionServiceImplTest.java代碼:
package me.timlong.spring.service.impl;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.BlockJUnit4ClassRunner;
import me.timlong.spring.base.UnitTestBase;
@RunWith(BlockJUnit4ClassRunner.class)
public class InjectionServiceImplTest extends UnitTestBase{
public InjectionServiceImplTest() {
super("resources/spring-injection.xml");
}
@Test
public void testConstructor() {//構造器中的參數名必須與類中的變量名保持一致
InjectionServiceImpl isi = super.getBean("injectionService");
isi.save("這是要保存的值value");
}
}
最終運行結果:
II 類似地,spring的構造器注入方式只需要更改些許配置文件,如下:
<?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="injectionService" class="me.timlong.spring.service.impl.InjectionServiceImpl">
<constructor-arg name="injectionDAO" ref="injectionDAO"></constructor-arg>
</bean>
<bean id="injectionDAO" class="me.timlong.spring.dao.impl.InjectionDAOImpl"></bean>
</beans>
代碼部分同上,最終運行結果亦同上。3、spring的IoC,把創建對象的權利交給框架,是框架的重要特徵,並非面向對象編程的專用術語。它包括依賴注入(Dependency Injection,簡稱DI)和依賴查找(Dependency Lookup),極大地方便了用戶編程。
紙上得來終覺淺,絕知此事要躬行!望每一天進步一點,