标签:spring 空间 pat 缓存 getter 处理 atomic 而且 people
学习文档
官方下载地址
Github
起源
作者
Rod Johnson,为了解决企业应用开发的复杂性而创建的。
发展历程
2002年,首次推出了Spring框架的雏形,interface21
2004年3月24日,正式发布了1.0版
概念、模块组成
Spring是一个轻量级的、非入侵的控制反转(IOC)和面向切面(AOP)的容器(框架)
Spring是一个分层架构,由7个定义良好的模块组成
Spring AOP
通过配置管理特性,Spring AOP模块直接将面向切面的编程功能,集成到了Spring框架中,Spring AOP模块为基于Spring应用程序中的对象提供了事务管理服务,通过使用Spring AOP,不用依赖组件,就可以将声明性事务管理集成到应用程序中。
Spring ORM
Spring插入了若干个ORM框架,从而提供了ORM的对象管理工具,其中包括JDO,hibernate,ibatis SQL Map,所有这些都遵从Spring的事务管理和DAO的异常层次结构。
Spring DAO
JDBC DAO抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商提供的错误信息,异常层次结构简化了错误处理,并且极大地降低了需要编写的异常处理代码数量(例如打开和关闭连接),Spring DAO面向JDBC的异常层次结构遵守了普通DAO的异常处理层次结构。
Spring Context
Spring上下文是一个配置文件,向Spring框架提供上下文信息,Spring上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring Web
Web上下文模块建立在应用程序上下文模块上,为基于Web应用程序提供可上下文,所以Spring框架支持与Jakarta Struts的集成 ,Web模块还简化了处理多部分请求和将请求参数绑定到域对象的工作。
Spring Web MVC
Spring MVC框架是一个全功能的构建Web应用程序的MVC实现,通过策略接口,MVC框架成为高度可配置的,MVC容纳了大量视图技术,其中包括jsp,Velocity,Tiles,iText和POI。
Spring Core
核心容器提供Spring框架的基本功能,核心容器的主要组件是Bean Factory,它是工厂模式的实现,BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用代码分开。
定义
一种通过描述(XML或注解)并通过第三方去生产或获取特定对象的方式。
IOC理解
控制:谁来控制对象的创建?
传统应用程序的对象是由程序本身创建的,使用Spring后,对象是由Spring创建的。
反转:程序本身不创建对象,而变成被动地接收对象。
示例
新建一个maven项目,在pom.xml中导入Spring依赖
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.4.RELEASE</version>
</dependency>
</dependencies>
导入了spring-webmvc之后,项目中多了以下几个依赖
编写实体类
package com.hmx.pojo;
?
public class Hello {
?
}
传统方式创建对象
Hello hello = new Hello();
使用Spring创建对象
1、在resources目录下新建beans.xml文件
右键点击resources ---》 new ---》 XML Configuration File ---》Spring Config,可以创建spring的配置文件
2、创建对象
3、测试注入是否成功
/*
语法:
获取Spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("创建的Spring配置xml文件名");
取对象
Hello hello = (Hello) context.getBean("xml文件中对应bean的id");
*/
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello) context.getBean("hello");
//输出结果:com.hmx.pojo.Hello@3abbfa04,说明创建对象成功。
System.out.println(hello);
}
singleton
单例模式(默认机制)
在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象
prototype
原型模式
在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象
以下4个只在Web开发中使用
request
session
application
websocket
依赖注入理解
依赖:对象的创建要依赖于spring容器
注入:对象中的属性由容器来注入
注入方式
1、构造器注入
1.1 、默认无参构造
实体类
package com.hmx.pojo;
?
public class User {
?
private String name;
private int age;
?
注入
测试
public static void main(String[] args) {
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
User user = (User) context.getBean("user");
//输出结果:User{name=‘null‘, age=0}
System.out.println(user.toString());
?
}
有参构造
实体类
package com.hmx.pojo;
?
public class User {
?
private String name;
private int age;
?
public User(String name,int age) {
this.name = name;
this.age = age;
}
?
1.2 、通过下标创建
<bean id="user" class="com.hmx.pojo.User">
<constructor-arg index="0" value="Andy"/>
<constructor-arg index="1" value="12"/>
</bean>
1.3 、通过类型创建
<bean id="user" class="com.hmx.pojo.User">
<constructor-arg type="java.lang.String" value="Andy"/>
<constructor-arg type="int" value="12"/>
</bean>
1.4 、有参构造方法通过参数名创建
<bean id="user" class="com.hmx.pojo.User">
<constructor-arg name="name" value="Andy"/>
<constructor-arg name="age" value="12"/>
</bean>
2、setter注入
实体类
Address类
public class Address {
private String address;
?
//此处省略setter和getter方法
?
//此处省略toString方法
}
Student类
public class Student {
?
private String name;
private Address address;
private String[] books;
private List<String> hobbys;
private Map<String, String> cards;
private Set<String> games;
private String wife;
private Properties info;
?
//此处省略setter和getter方法
?
//此处省略toString方法
}
注入