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

  • 相关阅读:
    ASP计算周开始和一年有多少周及某年第一周开始日期
    http://www.lancen.net/
    JSP的对象
    两个SQL语句
    sql 分頁
    网页特效制作汇总
    存储过程 解密
    一个计算周次和本周时间范围的代码(c#)
    Java试题
    如何在 VS 2005 里调试 Javascript
  • 原文地址:https://www.cnblogs.com/QH-Jimmy/p/7832934.html
Copyright © 2020-2023  润新知