在 Intellij Idea 环境下初探 Spring Core (一) 之 IoC/DI

说说

Spring 对我来说是一个全新的东西, 今天学了一天, 收获不少. Spring的官方简介到处都是, 所以我就只写出我自己的感想. Eclipse 的教程也很多, 所以我写了个 Intellij 的.

Spring

Spring 框架是一个集合了很多东西的框架, 最核心最底层的就是IoC/DI. 在这个基础之上, 有很多诸如 AOC, ORM, WebMVC, DAO, Context 之类的功能(容器).

  • IoC/DI 控制反转, 依赖注入. 就是你的类对应的对象不用你来 new, 框架帮你 new, 帮你 new 完了再放到你指定的变量里面, 你直接用就行. 他还帮你管理他什么时候 new 什么时候 delete. 这样搞的好处是解耦.
    • AOC, 面向切面编程. 类似于在一个方法的外面套一层壳子, 壳子的功能是: 先(后)执行壳子里面某一段语句再执行该方法, 或者当该方法抛出异常的时候执行壳子里面的某段语句.
    • ORM 对象关系映射. 你只需要操纵对象, ORM会帮你对应地操作关系型数据库.

我觉得 Spring 里面很多的功能, 以及很多基于 Spring 的插件, 都是基于 Spring 的控制反转以及面向切面编程来实现的. 所以初学只要学好 IoC 和 AOP, 就可以打好基础.

在 Intellij 中用 IoC 写一个 Hello World 程序

虽然公司里不用 Intellij 的 new project 来创建项目(都有自己的mvn模板), 但是这个小程序还是用 new project 比较方便.

  • 创建一个裸的 Spring 项目
  • 在 src/main/java 目录下创建一个包 com.jecvay.springhello
  • 在包里创建一个 HelloWorld 类, 这个类就是一会儿用框架new, 用框架注入到 main 方法里面的对象的类.
package com.jecvay.springhello;

public class HelloWorld {
    private String msg;
    public void setMsg(String x) {
        msg = x;
    }
    public void getMsg() {
        System.out.println("Hello, " + msg);
    }
}
  • 在 src/main/resources 下面创建一个 Beans.xml 文件, 内容如下. 这个文件主要就是声明了一个spring bean, 给出了id号, 以及对应的 class. 这个 class 里面还有 msg 这个属性, 可以直接在 bean 里面给出他的初始化值. 这里让 msg = “Jecvay”.
  <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="com.jecvay.springhello">;
        <property name="msg" value="Jecvay"/>;
    </bean>;
  </beans>;
  • 在包里创建一个 MainApp 类, 这是我们的程序入口
package com.tutorialspoint;

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"); // bean id
        obj.getMsg();
    }
}

这里 **HelloWorld obj = (HelloWorld) context.getBean(“helloWorld”);**这一句就是让Spring在运行的时候帮我们 new 一个HelloWorld对象出来并将其引用注入到 obj 这个变量中.

运行结果:
Hello, Jecvay

Process finished with exit code 0

这样就OK了.

注意

[注] Intellij 要求我们把 resources 文件夹在 Project Structure 中设置为 Resources 类型, 否则运行的时候可能报错找不到 Beans.xml 配置文件.