Spring是一个开源框架,Spring是为简化企业级应用开发而生的,使用Spring可以使简单的JavaBean实现以前只有EJB才能实现的功能;Spring是JavaEE/JavaSE的一站式框架。JavaEE在开发过程中会将服务器划分为三层:Web层,业务逻辑层,持久层。Spring对于这三层都提供了较为完善的解决方案:在Web层提供了SpringMVC;业务逻辑层提供了用于Bean管理的SpringIOC和事务;持久层提供了JDBC Template,或者与Mybatis等ORM框架进行整合。
优点:
接下来是Spring的模块(本文以Spring4为例进行学习介绍):
Spring官网并不直接提供Spring的下载,Spring现在托管在GitHub上,相应的下载步骤如下:你可以点击这里查看文章下载Spring,或者直接看下面的步骤:
1、进入Spring官网 -> PROJECTS -> SPRING FRAMEWORK:
2、点击GitHub的图标,进入GitHub:
3、进入Spring仓库后,继续按照图示操作进行:
接着点击org -> springframework -> spring,选择要下载的版本,展开它:
docs文件夹里是一些html文件,是Spring的API文档。libs文件夹里是Spring的jar包,一共63个。
正如你所看见的文件是三个一组,其中.RELEASE.jar
用于项目中,.RELEASE-javadoc.jar
是该jar包的说明文档,.RELEASE-source.jar
是该jar包的源码,也就是说真正在项目中用的就只有21个。
虽然有这么多包,但是只有4个是Spring的基础包,分别对应Spring核心容器的4个模块,注意它们是Spring项目必须的。
spring-core-5.1.8.RELEASE.jar
是Spring的核心工具类,其它jar包是建立这个包基础上的,都要用到这个包中的类;
spring-beans-5.1.8.RELEASE.jar
通常用于配置、创建、管理Bean,同时负责Ioc控制反转和DI依赖注入;
spring-context-5.1.8.RELEASE.jar
用于提供在基础IoC上的扩展服务
spring-expression-5.1.8.RELEASE.jar
用于提供对Spring表达式语言的支持。
另外Spring核心容器依赖第三方的commons.logging.jar
包,需要自己去下载这个包;通常也会添加log4j包用于开发时的代码调式和测试。
总结起来就是:使用Spring时,需要把Spring自带的21个jar包+1个第三方的commons.logging.jar
包添加到项目中即可。
下载安装Spring开发包-->复制Spring jar包至工程-->理解IOC控制反转和DI依赖注入-->编写Spring核心配置文件-->在程序中读取Spring配置文件,并通过Spring获得Bean,最终实现操作Bean的目的。
使用IDEA创建一个webapp项目,接着配置pom.xml:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-expression</artifactId>
<version>4.2.4.RELEASE</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
</dependencies>
接着在main包下面新建一个java源程序包,然后在main包中新建com/envy.service
文件包,里面新建一个接口UserService.java
的文件:
public interface UserService {
public void sayHello();
}
为了实现这个接口,在该service包中新建一个UserServiceImpl.java
的文件:
public class UserServiceImpl implements UserService {
private String name;
public String getName(){
return this.name;
}
public void setName(String name){
this.name=name;
}
public void sayHello() {
System.out.println("hello,spring!");
}
}
接着在main包下面新建一个与java同级的test文件夹,该文件夹是一个测试目录,然后在该test包中新建com/envy.test
文件包,里面新建一个测试文件UserServiceTest.java
:
/**
* 传统开发模式
**/
@Test
public void testOne() {
// UserService userService = new UserServiceImpl();
// userService.sayHello();
UserServiceImpl userServiceimpl = new UserServiceImpl();
userServiceimpl.setName("张三");
System.out.println(userServiceimpl.getName());
userServiceimpl.sayHello();
}
上面是传统的开发模式,如果单纯的需要使用sayHello方法,那么可以直接调用被注释的两行代码(只需要让接口的引用指向实现类的引用即可,无需创建实现类对象);如果是需要获取对象的属性,那么需要创建一个实现类对象,然后使用setter和getter方法分别去赋值和获值,这是非常麻烦的,因为涉及到修改实现类中的原始代码。
但是如果你是用SpringIOC 和DI的话,就需要按照如下进行操作:
第一步:在resource包中新建一个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">
<!-- 将userService的创建权交给了Spring -->
<bean id="userService" class="com.envy.service.UserServiceImpl">
<!-- 属性控制 -->
<property name="name" value="李四"></property>
</bean>
</beans>
最后在UserServiceTest测试文件中写入以下代码:
/**
* Spring开发模式
**/
@Test
public void testTwo() {
//创建Spring的工厂
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
//通过工厂获得类,参数是applicationContext.xml文件中的Bean的id,返回对象是Bean中的class对象
UserServiceImpl userServiceimpl = (UserServiceImpl) applicationContext.getBean("userService");
//调用对象的方法
System.out.println(userServiceimpl.getName());
userServiceimpl.sayHello();
}
注意到没有,需要使用属性只需在bean中进行property设置,然后在测试文件中直接调用实现类对象的getter方法就可以。更重要的是我们的Bean对象不再是自己来创建了,而是通过Spring来创建。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。