天天看點

Spring學習之路-從入門到放棄

  背景架構是真難入門啊!!!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再添加一個檔案夾

Spring學習之路-從入門到放棄

2、建立maven項目需要選準了

Spring學習之路-從入門到放棄

3、pom.xml中的依賴版本一定要注意jdk相容問題!!!!

Spring學習之路-從入門到放棄

4、記得将java檔案目錄設定為資源根目錄,右鍵檔案夾:

Spring學習之路-從入門到放棄

5、如果maven中配置了對應架構的依賴還是報錯:could not resolve symbol...直接File - Invalidate Cache,重新開機就好了

  目前,我隻是寫了個超級簡單的servlet,目錄如圖:

Spring學習之路-從入門到放棄

  基本上都是IDE幫我弄好了檔案夾,那個s是建立的,裡面的Servlet.java是寫的一個servlet類。web.xml中的mapping需要自己配置,IDE不會管的。

  到現在還是沒明白怎麼開始用Spring,官網是很全,但是我暫時沒找到像HelloWorld之類的萌新入門案例。

  總之一句話,寫代碼真是件簡單的事。

Two hours later...

  絕望的我已經開始搜尋這個:

Spring學習之路-從入門到放棄

  好在還真有超級超級簡單的案例,根據案例,建立一個弱智類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,結果如圖:

Spring學習之路-從入門到放棄

  由于配置比較簡單,是以可以很簡單粗暴的去了解:

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架構的人了!

轉載于:https://www.cnblogs.com/QH-Jimmy/p/7832934.html