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再添加一個文件夾

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM