Spring框架
Posted littleskinny
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Spring框架相关的知识,希望对你有一定的参考价值。
1、学习地址
学习文档
官方下载地址
Github
2、Spring基本介绍
起源
-
作者
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)模式将应用程序的配置和依赖性规范与实际的应用代码分开。
-
3、IOC(Inversion Of Control)
-
定义
一种通过描述(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);
}
4、bean的作用域
-
singleton
-
单例模式(默认机制)
-
在创建起容器时就同时自动创建了一个bean的对象,不管你是否使用,他都存在了,每次获取到的对象都是同一个对象
-
-
prototype
-
原型模式
-
在我们创建容器的时候并没有实例化,而是当我们获取bean的时候才会去创建一个对象,而且我们每次获取到的对象都不是同一个对象
-
以下4个只在Web开发中使用
-
request
-
session
-
application
-
websocket
5、DI( Dependency Injection )
-
依赖注入理解
-
依赖:对象的创建要依赖于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方法
} -
-
注入
-
-