Spring环境搭建和第一个Spring程序

  • Post author:
  • Post category:其他






Spring环境搭建和第一个Spring程序


一、 概述

1、 Spring的发展

(1) 是2003年由Rod Jahnson提出的轻量级的开发框架,可以解决面向对象编程中的耦合性问题。

(2) 它的产品:Spring 、SpringBoot、SpringData、SrpingMVC、Spring Cloud等,我们所学的是SpringFramwork,最新的版本是5,我们学的是4.9。

(3) Spring框架可以解决我们开发中遇到的各个层,包括视图层、业务层、持久层。

2、 核心内容

IoC、DI、AOP

(1)IoC( Inversion of Control):控制反转

(2)DI(Dependency Injection):注入依赖

(3)AOP(Aspect Oriented Programming):面对方面的编码或面向切面的编程

目前我们学的是OOP:面向对象的编程

另外IoC和DI表示的内容是一致。

3、 解决的问题

(1)解耦应用程序

(2)简化开发流程

(3)AOP支持

(4)声明式事务

(5)集成junit5

二、 环境搭建

1、下载jar包

(1) http://repo.spring.io/release/org/springframework/spring/

(2) https://maven.springframework.org/release/org/springframework/spring/

(3) https://repo.spring.io/

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

或直接输入地址:

https://repo.spring.io/webapp/#/artifacts/browse/tree/General/libs-release-local/org/springframework/spring

在这里插入图片描述

说明:

(1) dist是要下载的jar,里面包含很多个jar包

(2) docs是spring的API文档

(3) schema是maven的配置文件即xml里面的文件信息

(4) 第三方的日志jar包,搜索(common logging.jar mvn)

https://mvnrepository.com/artifact/commons-logging/commons-logging/1.1.1

2、Spring框架库需要使用的jar包

spring的jar包

spring-aop-4.3.9.RELEASE.jar :AOP操作必须导入此包

spring-beans-4.3.9.RELEASE.jar:实体类

spring-context-4.3.9.RELEASE.jar:上下文

spring-core-4.3.9.RELEASE.jar:核心包

spring-expression-4.3.9.RELEASE.jar:spring的专属表达式包

每个jar包都包含3个文件:

在这里插入图片描述

截图中的jar包分别表示:

(1) 需要在spring项目中导入的jar包

(2) 帮助文档

(3) 数据源,通过绑定,可以在开发中通过ctrl+单击类或接口追踪该类或接口的使用。

日志的jar包

log4j-1.2.17.jar commons-logging.jar

单元测试的jar包

在这里插入图片描述

三、 安装Spring插件

1、 下载安装(搜索 eclipse sts)

https://spring.io/tools3/sts/all

下载springsource-tool-suite-3.9.7.RELEASE-e4.9.0-updatesite,在eclipse中help-install new software…进行安装

在这里插入图片描述

上述操作完后等待eclipse安装到100%后重启。

2、 在线安装

http://dist.springsource.com/release/TOOLS/update/e4.9/

在这里插入图片描述

3、直接下载集合sts的eclipse ide

https://spring.io/tools

四、 创建项目完成第一个测试程序

1、 创建项目

2、 导入jar包(5+2)

3、 配置日志文件



Configure logging for testing: optionally with log file

log4j.rootLogger=WARN, stdout



log4j.rootLogger=WARN, stdout, logfile

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

log4j.appender.logfile=org.apache.log4j.FileAppender
log4j.appender.logfile.File=target/spring.log
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %p [%c] - %m%n

4、 创建实体类

5、 创建配置文件即bean容器

一般命名为applicationContext.xml,保存在src下,也可以放在web-inf下。

选择XSD的约束文件命名空间:

在这里插入图片描述

6、 applicationContext.xml文件的代码:

<bean id="p1" class="com.spring.entity.Person">
  <property name="id" value="1"></property>
  <property name="name" value="张涛"></property>
  <property name="age" value="23"></property>
</bean>

7、 从容器中取对象

ApplicationContext applicationContext =
	new ClassPathXmlApplicationContext("applicationContext.xml");
Person p1=	(Person) applicationContext.getBean("p1");

7、测试

五、 2种类型的工厂

FileSystemXmlApplicationContext:通过绝对路径的方式获取配置文件

ClassPathXmlApplicationContext:通过类路径方式获取配置文件

六、 id和name之前的区别

<bean id="p1" name="p2" class="com.ahbvc.spring.entity.Person">   
      <property name="id" value="1"></property>
      <property name="name" value="Tom"></property>
      <property name="age" value="20"></property>
    </bean>

在这里插入图片描述

Id是唯一的,name可以有多个

七、 单例、多例

1、 默认情况下是单例的,即scope=singleton

单例时,在容器启动时创建,而且只创建一个,可以通过scope=“singleton” lazy-init=“true”,来设置延迟启动。

(1) bean容器代码

<bean id="book" class="com.ahbvc.spring.entity.Book" scope="singleton">
 <property name="name" value="SSM框架开发"></property>
 <property name="price" value="56.8" ></property>
</bean>

(2) 测试代码

@Test
	public void test1()
	{
		ApplicationContext context=
	new ClassPathXmlApplicationContext("applicationContext2.xml");
		Book b= (Book) context.getBean("book");
		System.out.println(b.toString());
		Book b2= (Book) context.getBean("book");
		System.out.println(b2.toString());
		System.out.println(b==b2);
	}

单例模式优点:

(1) 单例模式保证了系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能;

(2) 当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new

(3) 单例模式使用的场景:需要频繁的进行创建和销毁的对象、创建对象耗费资源过多(即:重量级对象),但又经常用到的对象、 工具类对象、频繁访问数据库或文件的对象(比如 数据源、session 工厂等)

单例模式举例:

public class Singleton {
	private Singleton() {
	}

	private static Singleton instance;
	public static Singleton getInstance() {
		if (instance == null) {
			return instance = new Singleton();
		} else {
			return instance;
		}
	}
	public static void main(String[] args) {
		Singleton s1=Singleton.getInstance();
		Singleton s2=Singleton.getInstance();
		System.out.println(s1==s2);
	}
}

在这里插入图片描述

2、 如果是多例,则设置scope=prototype

多例时,容器启动时不创建,获取对象时才创建

分析结果:



调用构造方法





调用构造方法



Book [name=SSM框架开发, price=56.8]



调用构造方法



Book [name=SSM框架开发, price=56.8]

False

(1)bean容器代码

<bean id="book2" class="com.ahbvc.spring.entity.Book" scope="prototype">
 <property name="name" value="SSM框架开发"></property>
 <property name="price" value="56.8" ></property>
</bean>

(2)测试代码

@Test
public void test2()
{
	ApplicationContext context=
			new ClassPathXmlApplicationContext("applicationContext2.xml");
	Book b= (Book) context.getBean("book2");
	System.out.println(b.toString());
	Book b2= (Book) context.getBean("book2");
	System.out.println(b2.toString());
	System.out.println(b==b2);
}

3、scope=request 一个请求范围,是单例

4、scope=session 一个会话范围,是单例

在这里插入图片描述



版权声明:本文为m0_45858905原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。