搞完了java来学习一下spring,spring是一个开源的设计层面的框架,它是一款轻量级的高内聚低耦合的基于ICO以及AOP的开源框架,spring是春天的意思,是由一个悉尼大学的音乐博士rod搞出来的,这个男人改变了java世界。
Spring框架功能大约有20个模块这些模块按组可以分为核心容器,数据访问/集成,web,AOP(面向切面编程),设备、消息和测试。
先来看一下Spring的四大块
- IOC思想,这个是spring的设计思想,方便接偶,可以简化开发,Spring可以看作一个大的工厂,所有的对象创建跟关系维护,都交给他来管理,Spring容器里面承载的是对象,对象创建以及关系维护是基于反射
- AOP编程 面向切面编程,面向切面编程跟面向对象编程是补足的关系,举个例子,可以把我们的系统架构看作是一个横向的链条,这样可进行权限拦截等功能
- 声明式事务支持只需要通过配置就可以完成对事物的处理
- 方便集成各种优秀的框架,spring可以无缝整合其他的框架,因此spring更像一个管家,他来负责管理各个框架
首先使用idel创建一个maven项目
然后修改pom.xml文件,导入我们需要的依赖
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yang</groupId> <artifactId>com.yang-20200112</artifactId> <version>1.0-SNAPSHOT</version> <!-- 安装一下我们需要的依赖 --> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-beans</artifactId> <version>4.3.7.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context-support</artifactId> <version>4.3.7.RELEASE</version> </dependency> <!-- 这个是日志模块, 不是spring的依赖--> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.14</version> </dependency> <!-- junit测试框架 --> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13-rc-2</version> <scope>test</scope> </dependency> </dependencies> </project>
然后去项目的源码文件中写代码
package com.yang; public class Person { private int id; private String Name; private String sex; public Person() { } public Person(int id, String name, String sex) { this.id = id; Name = name; this.sex = sex; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public String getName() { return Name; } public void setName(String name) { Name = name; } public int getId() { return id; } public void setId(int id) { this.id = id; } public String toString() { return String.format("Person id: %s, name:%s, sex: %s", this.id, this.Name, this.sex); } }
之后在resources配置spring的配置文件,一般官网推荐名字时applicationCOntext.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <!--id, name 必须是唯一的, id里面不可以有特殊字符,在创建时,spring可以通过id或者name找到这bean--> <bean id="personId" name="personName" class="com.yang.Person"> <!--这个就是实例时的初始值--> <property name="id" value="1" /> <property name="name" value="ning" /> <property name="sex" value="female" /> </bean> </beans>
顺便配置一下log4j的配置文件
# log4J日志框架的配置文件 文件名字不能改
# DEBUG 表示日志的级别 调试
# Console 日志打印在控制台
log4j.rootLogger=INFO, Console
log4j.appender.Console=org.apache.log4j.ConsoleAppender
log4j.appender.Console.layout=org.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern=%d [%t] %-5p [%c] - %m%n
# 哪些日志需要打印
log4j.logger.java.sql.ResultSet=INFO
log4j.logger.org.apache=INFO
log4j.logger.java.sql.Connection=DEBUG
log4j.logger.java.sql.Statement=DEBUG
log4j.logger.java.sql.PreparedStatement=DEBUG
最终我们来看一下测试代码
package com.yang.test; import com.yang.Person; import org.junit.Test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; public class PersonTest { /** * 这个是传统方法进行的测试 */ @Test public void test1(){ Person p1 = new Person(1, "ming", "female"); System.out.println(p1); } /** * 这个是基于spring进行的测试,我们可以发现,对象不再由我们进行创建,而是交给spring, * 这样做的好处是,项目编译完成,我们还可以调整配置文件,改变输出的值,这样不就实现了解耦 */ @Test public void test2(){ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); Person person = (Person) ac.getBean("personId"); System.out.println(person); } }
通过上述代码,我们可以发现spring的IOC的设计思想,就是所有的对象创建之类的操作不需要我们管,spring会负责对象的生命周期以及对象间的关系,这个就是spring的核心思想。