Spring
Spring 框架是一个集合了很多东西的框架, 最核心最底层的就是IoC/DI. 在这个基础之上, 有很多诸如 AOC, ORM, WebMVC, DAO, Context 之类的功能(容器).
IoC/DI 控制反转, 依赖注入. 就是你的类对应的对象不用你来 new, 框架帮你 new, 帮你 new 完了再放到你指定的变量里面, 你直接用就行. 他还帮你管理他什么时候 new 什么时候 delete. 这样搞的好处是解耦.
AOC, 面向切面编程. 类似于在一个方法的外面套一层壳子, 壳子的功能是: 先(后)执行壳子里面某一段语句再执行该方法, 或者当该方法抛出异常的时候执行壳子里面的某段语句.
ORM 对象关系映射. 你只需要操纵对象, ORM会帮你对应地操作关系型数据库.
我觉得 Spring 里面很多的功能, 以及很多基于 Spring 的插件, 都是基于 Spring 的控制反转以及面向切面编程来实现的. 所以初学只要学好 IoC 和 AOP, 就可以打好基础.
创建一个裸的 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);
}
}
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 配置文件.