簡單記錄下自己常用的項目基礎工程,基礎工程包括常用的spring使用的配置形式和項目結構,結合maven,以后新建項目都可以直接基于此基礎工程。
1 新建Maven工程

新建的Java工程,不是web:

根據(jù)自己的實際情況填寫:

最后生成的工程結構如下圖所示:

2 下載spring
因為使用的是maven管理jar包,所以使用spring就不需要單獨的去下載spring,直接在maven的pom.xml文件引入即可,spring的maven 依賴可以在中央倉庫查找,如果是內(nèi)網(wǎng)的maven倉庫也是一樣,這里直接去中央倉庫查找:http://mvnrepository.com/

引入常用的spring-core、spring-beans、spring-context等spring核心jar包,這里需要注意的是要選擇central(中央倉庫),不然其他的第三方倉庫會無法訪問,出現(xiàn)報錯的情況:

并且所有jar包的版本最好保持一致,spring的版本最新好像和jdk8有點問題,我選擇的是統(tǒng)一的3.2.18版本:

將需要下載的包的dependency復制下來,粘貼到pom.xml文件,保存即可。
3 配置spring
常用的spring配置,在src/main/java新建一個spring配置文件:

命名為:applicationContext

,
會自動生成一個applicationContext.xml文件,這個作為spring啟動的核心配置文件,常用的配置如下:

其中,
<context:component-scan
base-package="com.codjust.demo.common" >
</context:component-scan>
配置的是spring自動掃描bean的路徑,這里配置的是路徑"com.codjust.demo.common",也就是說在此路徑的bean會被掃描進來,掃描的bean需要具備特殊的注解,如常用的@Component等。
context:annotation-config配置的是支持注解自動裝配,常用自動裝配注解有: @Autowired, @Inject等
<context:annotation-config/>
4 單元測試配置
研發(fā)過程中離不開單元測試,我們把src/test/java作為測試用例的目錄,我們編寫一個BaseCase的基類:

其中,
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:applicationContext.xml"})
表示單元測試基于跟工程同樣的配置啟動,基于applicationContext.xml配置文件,這樣單元測試用例可以測試項目的各種各樣的情況。
5 小小的demo
這里以一個Hello和Fight類作為演示,我們新建一個Fight類,
package com.codjust.demo.common;
import org.springframework.stereotype.Component;
@Component
public class Fight {
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public void sayHello() {
System.out.println("Hello Figghting!");
}
}
使用@Component打上注解,并且有一個sayhello的公用方法。
再新建一個Hello類:
package com.codjust.demo.common;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
@Component
public class Hello {
@Autowired
private Fight fight;
private int Id;
private String text;
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public void setId(int id) {
this.Id = id;
}
public int getId() {
return Id;
}
public void say() {
fight.sayHello();
}
}
同樣Hello也是打上@Component,同時在Hello類引用Fight bean,通過@Autowired自動裝配fight,這樣就能在Hello里面拿到Fight的bean,然后在say()方法去使用這個bean。
最后App類去啟動spring,并且使用拿到Hello的bean,調(diào)用say()方法,打印輸出:
package com.codjust.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.codjust.demo.common.Hello;
/**
* Hello world!
*
*/
public class App
{
public static void main( String[] args )
{
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
Hello obj1 = (Hello)ctx.getBean("hello");
obj1.say();
}
}
輸出如下圖所示:

編寫hello的測試類,TestHello,繼承自BaseCase:
package hello;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.codjust.demo.BaseCase;
import com.codjust.demo.common.Hello;
import org.junit.Assert;
public class Testhello extends BaseCase{
@Autowired
private Hello hello;
@Test
public void test_01() throws Exception {
hello.say();
hello.setText("nihao");
Assert.assertEquals(hello.getText(), "nihao");
}
}

6 最后
以上的demo很粗糙,但是麻雀雖小,五臟俱全,一個項目的結構基本就如此,以后有新的配置在此基礎上加即可,無論是netty還是hibernate等常用框架都可以通過spring來整合,配合maven管理包,無疑是非常方便的。
希望此文對大家有所幫助!
demo地址:
https://github.com/huchangwei/project_demo
Regards,
codjust