在 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 配置文件.
结尾写的注释太棒啦,通过一下方法解决:File->Project Structure->module->Source标签下选择资源文件目录,点击Resource按钮,然后点击apply即可