后台框架是真難入門啊!!!IDE的使用,環境的搭建,框架下載,上手,每一步都惡心人。
花了整整兩天,才學會用idea,並且初步了解了maven(TM就是一個npm),然后跟着下載了對應的jar包,搭建了一個簡單的servlet。
這里暫時記錄一下遇到的坑。
首先,為什么放棄Myeclipse?這個IDE只能下破解版的,界面是真的丑,下載的那些主題也特別僵硬。最重要的是,由於版本太低,只能用低版本的jdk,經常報一個version 51***的error,只能把jdk調到1,6,對應maven、spring都要調低版本,麻煩的很。
后來就嘗試換了idea,好在上手還算快,但是也有幾個巨坑:
1、idea中的project對應Myeclipse中的workspace,而module才是project,所以在新建一個project的時候,一定要在Project location再添加一個文件夾
2、新建maven項目需要選准了
3、pom.xml中的依賴版本一定要注意jdk兼容問題!!!!
4、記得將java文件目錄設置為資源根目錄,右鍵文件夾:
5、如果maven中配置了對應框架的依賴還是報錯:could not resolve symbol...直接File - Invalidate Cache,重啟就好了
目前,我只是寫了個超級簡單的servlet,目錄如圖:
基本上都是IDE幫我弄好了文件夾,那個s是新建的,里面的Servlet.java是寫的一個servlet類。web.xml中的mapping需要自己配置,IDE不會管的。
到現在還是沒明白怎么開始用Spring,官網是很全,但是我暫時沒找到像HelloWorld之類的萌新入門案例。
總之一句話,寫代碼真是件簡單的事。
Two hours later...
絕望的我已經開始搜索這個:
好在還真有超級超級簡單的案例,根據案例,創建一個弱智類HelloWorld:
package s; public class HelloWorld{ private String message; private String name; public void setName(String name) { this.name = name; } public void setMessage(String message){ this.message = message; } public void getMessage(){ System.out.println("Your Message : " + message); } public void printName(){ System.out.print("Name : " + name); } }
然后在同一個包下創建了另外一個厲害類:
package s; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); obj.getMessage(); obj.printName(); } }
這兩個類聯系起來需要靠一個xml的配置文件,就像servlet類將servlet處理文件與web請求聯系起來一樣,這里新建一個beans.xml關聯兩個java類;
<?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="helloWorld" class="s.HelloWorld"> <property name="message" value="Hello World!"/> <property name="name" value="春妹子"/> </bean> </beans>
(xml文件的開頭竟然不支持縮進)
最后運行那個MainApp,結果如圖:
由於配置比較簡單,所以可以很簡單粗暴的去理解:
1、id作為一個標識符去讓getBean方法進行獲取對應的類
2、class是一個路徑的完整映射,類似於servlet配置中的<servlet-class>
3、而property是實例化類后傳入的變量,name、value對應key與value
我是這樣理解的,配置了beans.xml后,所有bean中的class映射的類都將在初始化時被實例化並保存在某個特殊的地方,保存方式類似於Map,其實中key就是那個id。
可以通過context.getBean()方法獲取,傳入id可以得到對應的實例,返回的大概是一個Object類型,所以需要進行強制類型轉換。
之后,我對代碼做了少許調整:
package s; public class HelloWorld{ private String name; private int uid; public void setName(String name) { this.name = name; } public void printName(){ System.out.println("Name : " + name + uid + "號"); uid++; } }
在類中加入了一個計數器,然后主函數代碼修改如下:
public class MainApp { public static void main(String[] args) { ApplicationContext context = new ClassPathXmlApplicationContext("Beans.xml"); ApplicationContext context2 = new ClassPathXmlApplicationContext("Beans.xml"); HelloWorld obj = (HelloWorld) context.getBean("helloWorld"); HelloWorld obj2 = (HelloWorld) context2.getBean("helloWorld"); HelloWorld obj3 = (HelloWorld) context.getBean("helloWorld"); obj.printName(); // Name : 春妹子0號 obj.printName(); // Name : 春妹子1號 obj2.printName(); // Name : 春妹子0號 obj3.printName(); // Name : 春妹子2號 } }
通過輸出可以判定這樣的事實:
1、每一個context保存的類都是唯一的,可以簡單理解成單例
2、可以通過再次調用new Class***來獲取一個新的容器,並重新生成所有對應類
所以這就是傳說中的注入嗎?nice,nice,我也是了解spring框架的人了!