什么是Spring?
Spring框架是由于软件开发的复杂性而创建的。Spring使用的是基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途不仅仅限于服务器端的开发。从简单性、可测试性和松耦合性角度而言,绝大部分Java应用都可以从Spring中受益。
为什么要使用Spring框架
- Spring是一个开源的免费的框架(容器)
- Spring是一个轻量的、非侵入式的框架
- 控制反转(IOC)、面向切面编程(AOP)
- 支持事务的处理、对框架整合的支持
总结:Spring就是一个轻量级的IOC和AOP框架
Spring的组成(七大模块)
1. Spring Core:
Core封装包是框架的最基础部分,提供IOC和依赖注入特性。这里的基础概念是BeanFactory,它提供对Factory模式的经典实现来消除对程序性单例模式的需要,并真正地允许你从程序逻辑中分离出依赖关系和配置。
2.Spring DAO:
DAO (Data Access Object)提供了JDBC的抽象层,它可消除冗长的JDBC编码和解析数据库厂商特有的错误代码。 并且,JDBC封装包还提供了一种比编程性更好的声明性事务管理方法,不仅仅是实现了特定接口,而且对所有的POJOs(plain old Java objects)都适用。
3.Spring Context:
构建于Core封装包基础上的 Context封装包,提供了一种框架式的对象访问方法,有些象JNDI注册器。Context封装包的特性得自于Beans封装包,并添加了对国际化(I18N)的支持(例如资源绑定),事件传播,资源装载的方式和Context的透明创建,比如说通过Servlet容器。
4.Spring AOP:
Spring的 AOP 封装包提供了符合AOP Alliance规范的面向方面的编程实现,让你可以定义,例如方法拦截器(method-interceptors)和切点(pointcuts),从逻辑上讲,从而减弱代码的功能耦合,清晰的被分离开。而且,利用source-level的元数据功能,还可以将各种行为信息合并到你的代码中。
5.Spring Web:
Spring中的 Web 包提供了基础的针对Web开发的集成特性,例如多方文件上传,利用Servlet listeners进行IOC容器初始化和针对Web的ApplicationContext。当与WebWork或Struts一起使用Spring时,这个包使Spring可与其他框架结合。
6.Spring ORM:
ORM 封装包提供了常用的“对象/关系”映射APIs的集成层。其中包括JPA、JDO、hibernate 和 iBatis 。利用ORM封装包,可以混合使用所有spring提供的特性进行“对象/关系”映射,如前边提到的简单声明性事务管理。
7.Spring Web MVC:
Spring中的MVC封装包提供了Web应用的Model-View-Controller(MVC)实现。Spring的MVC框架并不是仅仅提供一种传统的实现,它提供了一种清晰的分离模型,在领域模型代码和Web Form之间。并且,还可以借助Spring框架的其他特性。
Spring项目搭建(IDEA+Maven)
作者环境:JDK1.8.0、Maven3.6.3
如何安装Maven本地仓库这里就不多说了,很多的Blog都可以去查看。
- 创建一个Maven项目
- 继上一步next,输入项目的名称和选择项目所在的位置,填好了我们就可以直接finish
- 选择IDEA自带的导包
- 导入Core Container相应的jar包,查找相应的包可以到MavenRepository
- 创建HelloWorld实体类和Spring配置文件(applicationContext.xml)
public class HelloWorld {
private String message;
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
}
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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--配置Bean
id:bean的唯一标识符,不可重复
class:实体类的全类名
property :通过setter方法对注入
-->
<bean id="helloworld" class="com.gee.pojo.HelloWorld">
<property name="message" value="Hello World"/>
</bean>
</beans>
测试类
import com.gee.pojo.HelloWorld;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
public static void main(String[] args) {
/*
*创建AplicationContext容器对象:
* ApplicationContext:代表IOC容器
* ClassPathXmlApplicationContext:当前应用的xml配置文件在ClassPath下
* */
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//从IOC容器中获取Bean
HelloWorld helloWorld = context.getBean("helloworld",HelloWorld.class);
System.out.println(helloWorld.getMessage());
}
}
运行结果:
在这几个步骤中,没有展示对应的截图,所以在这里放出一下我的项目结构截图(仅供参考)
注:博主也是第一次尝试着写blog,所以可能有很多不好的地方,还望大家谅解,如果有错误的地方希望大佬们能够不吝赐教。