谁生的:起初Rod Jahnoson 2002年出版的《Expert One-on-One J2EE Design and Development》书,该书出首次出现了Spring中的一些核心思想。
为何出生:Spring出现是时代发展的必然。在1999-2000年J2EE应用程序广泛出现,使用EJB开发J2EE应用程序导致项目会存在大量的重复代码,且EJB技术的学习成本高,应用环境差。为了使JAVA EE开发更加容易,2003年,Spring应运而生。
注释:EJB介绍:企业级JavaBean(Enterprise JavaBean, EJB)是一个用来构筑企业级应用的服务器端可被管理组件。
Spring目的:使程序开发更加简单、减少代码冗余。
简介:
Spring是一个java企业级应用的开源框架,主要用于java应用开发,使用Spring框架是为了简化java企业级应用代码。
若使用Spring Framework 5.1,需要JDK 8以上的版本支持
官方文档: https://docs.spring.io/spring/docs/4.3.x/spring-framework-reference/htmlsingle/
gitHub:https://github.com/spring-projects/spring-framework
核心容器,提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转(IOC)模式,将应用程序的配置和依赖性规范与实际的应用程序代码分开。
IOC又称控制反转,所谓控制反转即将对象的创建、存储、管理交给Spring容器。
目的:减少代码之间的耦合
耦合 :
代软件开发中,层与层之间的关系程序,耦合高则层与层之间关系密切,修改一个层可能会影响另外一个层;耦合低则反之。
<!-- id=获取Bean对象的唯一标记 ,class=文件地址 -->
<bean id="hello" class="com.abc.Hello"></bean>
//IOC类
public class Hello {
public void say() {
System.out.println("Hello World!");
}
}
//测试类
public class TestIOC {
public void main(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean("刚定义的id");
Hello hello =(Hello)context.getBean("hello");
}
hello.say();
}
输出结果
Hello World!
public class TestIOC {
public void main(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean("刚定义的id");
Hello hello =(Hello)context.getBean("hello");
}
System.out.print(hello)
}
输出结果
Hello [name=null,age=null]
1、测试未注入时的类
1)方法一:Lombok依赖
<!--引入插件lombok 自动的set/get/构造方法插件 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
添加@Data即可自动生成set/get/构造方法。
2)方法二:手动添加set、get、构造方法
修改配置文件applicationContext.xml :
<!-- 声明User类的bean实例 -->
<bean id="hello" class="com.abc.Hello">
<!-- 通过set方式为普通属性赋值 -->
<property name="name" value="abc"></property>
<property name="age" value="10"></property>
</bean>
测试 :
public class TestIOC {
public void main(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean("刚定义的id");
Hello hello =(Hello)context.getBean("hello");
}
System.out.print(hello)
}
输出结果
Hello [name=abc,age=10]
修改配置文件applicationContext.xml :
<bean id="hello" class="com.abc.Hello">
<!-- 通过构造器中参数为属性赋值 -->
<constructor-arg name="name" value="qwe"></constructor-arg>
<constructor-arg name="age" value="30"></constructor-arg>
</bean>
测试 :
public class TestIOC {
public void main(){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean("刚定义的id");
Hello hello =(Hello)context.getBean("hello");
}
System.out.print(hello)
}
输出结果
Hello [name=qwe,age=30]
Spring上下文,是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括JDO、Hibernate和iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
通过配置管理特性,Spring AOP 模块直接将面向切面的编程功能集成到了 Spring 框架中。可以很容易地使 Spring框架管理的任何对象支持AOP。Spring AOP模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,就可以将声明性事务管理集成到应用程序中。
Web上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以Spring 框架支持与 Jakarta Struts的集成。Web模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。