SSM框架——1.spring的下载、安装与测试

spring

Spring架构图
在这里插入图片描述
此外,可以查看 Spring 5.3.3 API文档
在这里插入图片描述

开放源代码(开源)、轻量级、低侵入、代码污染低,独立于各种服务器,DI(IOC)降低了业务对象替换复杂性,Rod Johnson发起

优点

①. Spring是一个轻量级的IOC和AOP容器框架
②. Spring是非侵入式的,基于Spring开发的应用一般不依赖于Spring的类
③. Spring是个容器,因为它包含并且管理应用对象的生命周期和配置,比如对象的创建、销毁、回调等
④. Spring提供对事务的管理
⑤. Spring对主流的框架提供了很好的集成支持,比如和hibernate SpringMVC等框架的集成
轻量级:Spring 在大小和透明性方面绝对属于轻量级的。
控制反转(IOC):Spring 使用控制反转技术实现了松耦合,依赖被注入到对象,而不是创建或寻找依赖对象。
面向切面编程(AOP):Spring 支持面向切面编程,同时应用的业务逻辑与系统的服务分离开来。
容器:Spring 包含并管理应用程序对象的配置及生命周期。
MVC 框架:Spring 的web框架是一个设计优良的web MVC框架,很好的取代了一些web框架。
事务管理(Transaction):Spring对下至本地业务上至全局业务(JAT)提供了统一的事务管理接口。

核心容器

1.Core模块:

封装了框架依赖的最底层部分,包括资源访问、类型转换及一些常用工具类。

2.Beans模块:

提供了框架的基础部分,包括反转控制和依赖注入。其中Bean Factory是容器核心(工厂),本质是“工厂设计模式”的实现,而且无需编程实现“单例设计模式”,单例完全由容器控制,而且提倡面向接口编程,而非面向实现编程;所有应用程序对象及对象间关系由框架管理,从而真正把你从程序逻辑中把维护对象之间的依赖关系提取出来,所有这些依赖关系都由BeanFactory来维护。

3.Context模块:

以Core和Beans为基础,集成Beans模块功能并添加资源绑定、数据验证、国际化、Java EE支持、容器生命周期、事件传播等;核心接口是ApplicationContext。

4.EL模块:

提供强大的表达式语言支持,支持访问和修改属性值,方法调用,支持访问及修改数组、容器和索引器,命名变量,支持算数和逻辑运算,支持从Spring 容器获取Bean,它也支持列表投影、选择和一般的列表聚合等。

5.AOP模块(相对不是核心):

Spring AOP模块提供了符合 AOP Alliance规范的面向方(切)面的编程(aspect-oriented programming)实现,提供比如日志记录、权限控制、性能统计等通用功能和业务逻辑分离的技术(只是提供实现技术,而不是现成的系统),并且能动态的把这些功能添加到需要的代码中;这样各专其职,降低业务逻辑和通用功能的耦合。

6.DataACCESS模块:

Spring本身的 JDBC, 和其他的框架整合 ORM(Mybatis Hibernate)

7.WEB模块:

Web的部分(Spring MVC),和其他框架如:Struts2整合的部分;

*8.ORM模块:

spring管理其他数据访问框架模块的技术

核心类/接口

BeanFactory、Beanwrapper、ApplicationContext

SpringMVC类

DispatherServlet


开始

1.新建项目

新建javaProject/javaWeb工程
在这里插入图片描述

2. 下载jar包

点击下载Spring的jar包地址:
进入org->springframework->spring,这里可以下载各个版本,笔者这边使用5.1.11
在这里插入图片描述
解压后得到以下jar包
在这里插入图片描述

另外MVN官网搜索commons-logging.jar,下载(需要下载的原因是spring的核心容器必须依赖于common-logging的jar包
在这里插入图片描述
在这里插入图片描述

3.导入jar包

为什么要导入一个不是spring的jar包?-> spring有用到这个jar包
总共是7个spring包+1个commons包
在这里插入图片描述

4.创建实体类

Girl.java和Blog.java实体类要实现序列化接口
Girl.java实体类

package com.ccp.entity;

import java.io.Serializable;

public class Girl implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -4206067945036107048L;
	private String name;
	private int tall;
	private int age;

	public Girl() {
		System.out.println("girl无参构造");
	}

	public Girl(String name, int tall, int age) {
		super();
		this.name = name;
		this.tall = tall;
		this.age = age;
		System.out.println("girl有参构造");
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getTall() {
		return tall;
	}

	public void setTall(int tall) {
		this.tall = tall;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	@Override
	public String toString() {
		return "Girl [name=" + name + ", tall=" + tall + ", age=" + age + "]";
	}

}

Blog .java

package com.ccp.entity;

import java.io.Serializable;

public class Blog implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = -8144693488047625165L;
	private int id;
	private String title;
	
	public Blog(int id, String title) {
		super();
		this.id = id;
		this.title = title;
	}

	public Blog() {
		// TODO Auto-generated constructor stub
	}
	
	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getTitle() {
		return title;
	}

	public void setTitle(String title) {
		this.title = title;
	}

	@Override
	public String toString() {
		return "Blog [id=" + id + ", title=" + title + "]";
	}

}

5. Spring配置文件

新建里面输入spring,如果和我一样为空的话
在这里插入图片描述
则新建一个xml文件在src下,取名任意(这里取applicationContent)
在这里插入图片描述

给xml新增代码

<?xml version="1.0" encoding="UTF-8"?>

<!-- java对象的管理开始 -->
<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就是对象名 class就是类名,记得要包含完整的包名 -->

	<!-- scope="prototype"中的prototype是懒加载,如果加上的话会不自动加载无参构造,等到使用(context.getBean)才加载 -->
	<!-- 默认情况下/不写,scope="singleton" Spring容器就会自动初始化所有的单例-->
	<!-- <bean id="girl" class="com.ccp.entity.Girl" scope="prototype"> -->
	
	<!-- bean的约束(id和name除命名规则差异,使用效果无异) -->
	<!-- 给实体类的属性赋值——字面值 -->
	<bean class="com.ccp.entity.Girl" id="girl">

		<property name="name" value="小t"></property>
		<property name="tall" value="160"></property>
		<property name="age" value="22"></property>

		<property name="blog" ref="blog"></property>
	</bean>

	<!-- 给实体类的属性赋值——引用值 -->
	<bean id="blog" class="com.ccp.entity.Blog">
		<property name="id" value="12"></property>
		<property name="title" value="小书本"></property>
	</bean>
</beans>

6. 新增Test测试类

注意写ApplicationContext时,引入包要 org.springframework.context 下的

package com.ccp.test;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.ccp.entity.Girl;

public class Test {
	public static void main(String[] args) {
		// ApplicationContext获取bean对象
		ApplicationContext context = new ClassPathXmlApplicationContext("applicationContent.xml");
		
		// 这个对象管理bean,获取bean
		
		//除以下两种写法,还有更多
		//找spring容器拿对象-getBean("....")  这里面写的girl是xml中bean的id
//		Girl girl = context.getBean("girl", Girl.class);
		Girl girl = (Girl) context.getBean("girl");
		Girl girl2 = (Girl) context.getBean("girl");
		System.out.println(girl);
	}
}

执行结果:会加载类的无参构造(且无论如何,只执行一次无参)
在这里插入图片描述

附录:

bean scope=""实例化时机描述
bean scope=”singleton”Spring容器就会自动初始化所有的单例(默认每次取出的bean都是同一个bean
prototype不会自动初始化,而是等使用(context.getBean)的时候才实例化每次取的bean时,都会重新创建一个新的bean ,是懒加载
request一次请求一个bean定义对应一个实例(web相关)
session一个session定义对应一个实例(web相关)
globalsession类似于session作用域,只是其用于portlet环境的web应用。如果在非portlet环境将视为session作用域(web相关)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

千鹤万象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值