2021-12-31 IDEA创建 Maven Quickstart Spring项目

Spring 是目前主流的 Java Web 开发框架,是 Java 世界最为成功的框架。该框架是一个轻量级的开源框架,具有很高的凝聚力和吸引力。

Spring 框架不局限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何 Java 应用都可以从 Spring 中受益。Spring 框架还是一个超级粘合平台,除了自己提供功能外,还提供粘合其他技术和框架的能力。

OS:macOS High Sierra (Version: 10.13.6)

Java, Maven,IDEA,MariaDB等安装配置过程,见 IDEA创建Maven Quickstart项目


1. 在 IDEA上创建 Maven Quickstart 项目

   New Project -> Project Type: Maven -> Project SDK: 1.8 -> select maven-archtype-quickstart: Next

       Name: MavenQuickstartSpring

       GroupId: com.example

       ArtifactId: MavenQuickstartSpring

   -> Finish

    生成的项目目录结构,参考 IDEA创建Maven Quickstart项目


2.  导入Spring 依赖包

     访问 http://www.mvnrepository.com/,查询 Spring

     修改 pom.xml

        <project ... >

            ...

            <dependencies>

                 ...

                <!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->

                <dependency>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-core</artifactId>

                    <version>5.3.9</version>

                </dependency>

                <!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->

                <dependency>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-context</artifactId>

                    <version>5.3.9</version>

                </dependency>

                <!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->

                <dependency>

                    <groupId>org.springframework</groupId>

                    <artifactId>spring-beans</artifactId>

                    <version>5.3.9</version>

                </dependency>

                <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->

                <dependency>

                      <groupId>org.springframework</groupId>

                      <artifactId>spring-jdbc</artifactId>

                      <version>5.3.9</version>

                </dependency>

                ...

            </dependencies>

            ...

        </project>

        在IDE中项目列表 -> 点击鼠标右键 -> Maven -> Reload Project


3. 添加 src/main/resources/spring-beans.xml

    <?xml version="1.0" encoding="UTF-8"?>

    <beans xmlns="http://www.springframework.org/schema/beans"

               xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

               xmlns:context="http://www.springframework.org/schema/context"

               xsi:schemaLocation="http://www.springframework.org/schema/beans

                            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd

                            http://www.springframework.org/schema/context

                            http://www.springframework.org/schema/context/spring-context-3.0.xsd"

               default-init-method="init"

               default-destroy-method="destroy">


    </beans>


4. 基于 spring-beans.xml 的 Beans

    1)添加 src/main/java/com/example/hello/HelloWorld.java

package com.example.hello;

public class HelloWorld {

    private String message1;

    private String message2;

    public void getMessage1() {

        System.out.println("HelloWorld -> message1 = " + message1);

    }

    public void setMessage1(String message) {

        this.message1 = message;

    }

    public void getMessage2() {

        System.out.println("HelloWorld -> message2 = " + message2);

    }

    public void setMessage2(String message) {

        this.message2 = message;

    }

    public void init() {

        System.out.println("HelloWorld -> init()");

    }

    public void destroy() {

        System.out.println("HelloWorld -> destroy()");

    }

}

    2) 添加 src/main/java/com/example/hello/HelloChina.java

package com.example.hello;

public class HelloChina {

    private String message1;

    private String message2;

    private String message3;

    private String emptyValue;

    private String nullValue;

    public void setMessage1(String message) {

        this.message1 = message;

    }

    public void setMessage2(String message) {

        this.message2 = message;

    }

    public void setMessage3(String message) {

        this.message3 = message;

    }

    public void getMessage1() {

        System.out.println("HelloChina -> message1 = " + message1);

    }

    public void getMessage2() {

        System.out.println("HelloChina -> message2 = " + message2);

    }

    public void getMessage3() {

        System.out.println("HelloChina -> message3 = " + message3);

    }

    public void getEmptyValue() {

        System.out.println("HelloChina -> emptyValue = " + emptyValue);

    }

    public void setEmptyValue(String emptyValue) {

        this.emptyValue = emptyValue;

    }

    public void getNullValue() {

        System.out.println("HelloChina -> nullValue = " + nullValue);

    }

    public void setNullValue(String nullValue) {

        this.nullValue = nullValue;

    }

    public void init() {

        System.out.println("HelloChina -> init()");

    }

    public void destroy() {

        System.out.println("HelloChina -> destroy()");

    }

}

    3) 添加 src/main/java/com/example/hello/InitHelloWorld.java

package com.example.hello;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

import org.springframework.core.Ordered;

public class InitHelloWorld implements BeanPostProcessor, Ordered {

    @Override

    public Object postProcessBeforeInitialization(Object bean, String beanName)

            throws BeansException {

        System.out.println("InitHelloWorld -> postProcessBeforeInitialization(): " + beanName);

        return bean;

    }

    @Override

    public Object postProcessAfterInitialization(Object bean, String beanName)

            throws BeansException {

        System.out.println("InitHelloWorld -> postProcessAfterInitialization(): " + beanName);

        return bean;

    }

    @Override

    public int getOrder() {

        return 3;

    }

}

    4) 添加 src/main/java/com/example/hello/InitHelloWorld2.java

package com.example.hello;

import org.springframework.beans.BeansException;

import org.springframework.beans.factory.config.BeanPostProcessor;

import org.springframework.core.Ordered;

public class InitHelloWorld2 implements BeanPostProcessor, Ordered {

    @Override

    public Object postProcessBeforeInitialization(Object bean, String beanName)

            throws BeansException {

        System.out.println("InitHelloWorld2 -> postProcessBeforeInitialization(): " + beanName);

        return bean;

    }

    @Override

    public Object postProcessAfterInitialization(Object bean, String beanName)

            throws BeansException {

        System.out.println("InitHelloWorld2 -> postProcessAfterInitialization(): " + beanName);

        return bean;

    }

    @Override

    public int getOrder() {

        return 0;

    }

}

    5) 修改 src/main/resources/spring-beans.xml

<beans ...>

  ...

    <bean id="helloWorld" class="com.example.hello.HelloWorld">

        <property name="message1" value="Hello World 1" />

        <property name="message2" value="Hello World 2" />

    </bean>

    <bean id="helloChina" class="com.example.hello.HelloChina" parent="helloWorld">

        <property name="message3" value="Hello China 3" />

        <property name="emptyValue" value="" />

        <property name="nullValue"><null/></property>        

    </bean>

    <!-- 后置处理器 -->

    <bean class="com.example.hello.InitHelloWorld" />

    <bean class="com.example.hello.InitHelloWorld2" />

    ...

</beans>


5. 基于注解 @Component, @Resource 的 Beans

    1) 添加 src/main/java/com/example/Man.java

package com.example;

import org.springframework.stereotype.Component;

import org.springframework.beans.factory.annotation.Value;

@Component("man")

public class Man {

    @Value("${name}")

    private String name;

    @Value("${age}")

    private int age;

    public Man() {

        System.out.println("Man -> Man()");

    }

    public Man(String name, int age) {

        System.out.println("Man -> Man(name, age)");

        this.name = name;

        this.age = age;

    }

    public void show() {

        System.out.println("Main -> show(): name = " + name + ", age = " + age);

    }

    public String getName() {

        return name;

    }

    public void setName(String name) {

        this.name = name;

    }

    public int getAge() {

        return age;

    }

    public void setAge(int age) {

        this.age = age;

    }

}

    2) 添加 src/main/java/com/example/Person.java

package com.example;

import org.springframework.stereotype.Component;

import javax.annotation.Resource;

@Component("person")

public class Person {

    @Resource(name="man")

    private Man man;

/*

    // 构造函数注入

    public Person(Man man) {

        System.out.println("Person -> Person(man)");

        this.man = man;

    }

*/

    public void man() {

        man.show();

    }

    public Man getMan() {

        return man;

    }

    public void setMan(Man man) {

        System.out.println("Person -> setMan()");

        this.man = man;

    }

}

    3) 添加 src/main/resources/config.properties

        name=tester

        age=25

    4) 修改 src/main/resources/spring-beans.xml

<beans ...>

    ...

    <!-- 使用context命名空间,通知spring扫描指定目录,进行注解的解析 -->

    <context:component-scan base-package="com.example" />

    <context:property-placeholder location="classpath:config.properties"/>

    ...

</beans>


6. 添加 src/main/java/com/example/App.java

package com.example;

import org.springframework.context.support.AbstractApplicationContext;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ksmstock.hello.HelloWorld;

import com.ksmstock.hello.HelloChina;

/**

* Hello world!

*

*/

public class App {

    public static void main( String[] args ) {

        AbstractApplicationContext context = new ClassPathXmlApplicationContext("spring-beans.xml");

        HelloWorld objA = (HelloWorld) context.getBean("helloWorld");

        objA.getMessage1();

        objA.getMessage2();

        HelloChina objB = (HelloChina) context.getBean("helloChina");

        objB.getMessage1();

        objB.getMessage2();

        objB.getMessage3();

        objB.getEmptyValue();

        objB.getNullValue();

        Person person = (Person) context.getBean("person");

        person.man();        

        context.registerShutdownHook();

    }

}


7. 编译运行

    1) Run App.main()

        打开 App.java, 点击鼠标右键, 选择 Run "App.main()"

    2) Edit Configurations

        Click "+" add new configuration -> Select "Application"

            Name: MavenQuickstartSpring

            Main class: com.example.App

        -> Apply / OK

        Click Run "MavenQuickstartSpring"

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,902评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,037评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,978评论 0 332
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,867评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,763评论 5 360
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,104评论 1 277
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,565评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,236评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,379评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,313评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,363评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,034评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,637评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,719评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,952评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,371评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,948评论 2 341

推荐阅读更多精彩内容