Spring框架简介
诞生背景:Spring还未诞生之时,Java企业开发一直采用Sun 公司的EJB(Enterprise Java Bean)框架,但EJB本身过于庞大,又有着非常多的开发规范,开发起来十分麻烦,更为人诟病的是很多时候大材小用,一个小型web程序根本用不着EJB的繁杂功能。
Spring是在2003年兴起的一个轻量级的开源框架,由Rod johnson创建。主要对JavaBean的生命周期进行管理的轻量级框架,Spring给JavaEE带来了春天。
Spring致力于J2EE应用的各层的解决方案,而不是仅仅专注于某一层的方案。可以说Spring是企业应用开发的“一站式”选择的框架,并贯穿表现层、业务层及持久层。并且Spring可以与其他框架无缝地整合。Spring是为了解决企业应用开发的复杂性而创建的。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
简单来说,Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的JavaBean容器框架。
Spring框架特点
- 轻量级:不仅仅他的文件大小很小,而且Spring是非侵入性。
- 依赖注入:IOC(DI)和面向切面编程:AOP
- 容器:Spring是一个容器,因为它包含并且管理应用对象的生命周期
- 框架:Spring实现了使用简单的组件配置组合成一个复杂的应用。
- 一站式:在IOC和AOP的基础上可以整合各种企业应用的开源框架和优秀的第三方类库
知识点:轻量级框架和重量级框架的区别
轻量级和重量级的框架是以启动程序所需要的加载资源所决定,比如EJB在启动程序的时候需要消耗大量的资源,
内存和 CPU,所以是重量级。
Spring架构体系
创建一个最简单Sring的HelloWorld项目
不用maven创建。也不用web.xml文件来初始化加载spring容器,完全原始撸代码
创建helloworld的最小基本单元需要使用sping的Core Container模块即可,再少就无法运行spring了,
所以需要引入的Jar为:
由于Spring 默认使用commons-logging日志框架(spring-core.jar依赖它)也需要导入commons-logging.jar
下面开始搭建最小Spring项目:
演示项目目录结构:
创建一个HelloWorld.java:
package com.dk.dev.demo;
public class HelloWorld {
private String name;
public void setName(String name) {
System.out.println("调用了设置属性");
this.name = name;
}
public HelloWorld() {
System.out.println("初始化构造器");
}
public void hello() {
System.out.println("Hello: " + name);
}
}
创建一个Spring的配置文件applicationContext.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/context http://www.springframework.org/schema/context/spring-context-4.3.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd">
<bean id="helloworld" class="com.dk.dev.demo.HelloWorld">
<property name="name" value="Spring"></property>
</bean>
</beans>
创建一个Main.java(主函数启动入口)
package com.dk.dev.demo;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
// 1、创建Spring的IOC容器的对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:config/applicationContext.xml");
// 2、从IOC的容器中获取Bean的实例
HelloWorld helloWorld = (HelloWorld) ctx.getBean("helloworld");
// 3、调用hello方法
helloWorld.hello();
}
}
执行main方法启动Spring容器后,控制台输出:
我们把获取Bean的实例和调用hello方法的都注释掉(即把2和3的全注释掉),那么结果应该是什么?
说明了在创建SpringIOC容器的时候,就已经对类进行了实例化并对属性进行了赋值,
一个最简单版的spring项目演示就完成了!