Spring(一)———简介、第一个项目搭建
1、简介
Spring是一个开源框架,为简化企业级应用开发而生的,使用Sprig可以像使简单的JavaBean具有以前只有EJB才能实现的功能。
同时Spring是一个轻量级的控制反转(依赖注入)(IoC)(DI)和面向切面(AOP)的容器框架。
优点
- 大小与开销两方面spring都是轻量级的。
- 通过依赖注入的技术达到松耦合的目的。
- 提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务进行内聚性的开发。
- 包含并管理应用对象的配置和生命周期,这个意义上是一种容器。
- 将简单的组件配置、组合成为复杂的应用,这个意义上是框架。
spring的作用:
- 方便解耦,简介开发
- 容器
- AOP编程支持(事务管理、日志等)
- 声明式事务的支持
- 提供了对多种技术的支持:JMS、MQ支持、UnitTest ...
- 提供了众多方便应用的辅助类(JDBCTemplate等)
- 对主流应用框架(Hibernate等)提供了良好的支持。
适用范围:
- 构建企业应用(SpringMVC + Spring + Hibernate/mybatis)。
- 单独使用Bean(Bean管理)。
- 单独使用AOP进行切面处理。
- 其他的Spring功能,如对消息的支持等。
- 在互联网中的应用。。。
简单来说Spring就是能帮助你更容易开发后端的东西。在某些场合可以减少很多的配置(例如减少Mybatis的配置)。
在Spring上开发应用简单、方便、快捷。
模块组成
图中的每一个最小单元,Spring都至少有一个对应的 jar 包。
(1) 核心容器(core container)
- Spring-Core:核心工具类,Spring其他模块大量使用 Spring-Core。
- Spring-Beans:Spring定义Bean的支持。
- Spring-Context:运行时 Spring 容器。
- Spring-Context-Support:Spring 容器对第三方包的集成支持。
- Spring-Expression:
(2)AOP
- Spring-AOP
- Spring-Aspects
(3) 消息(messaging)
- Spring-Messaging
(4)Web
- Spring-Web
- Spring-Webmvc
- Spring-WebSocket
- Spring-Webmvc-Portlet:
(5)数据访问 / 集成(Data Access/Integration)
- Spring-JDBC
- Spring-TX
- Spring-ORM
- Spring-OXM
- Spring-JMS
——先来个例子理解一下。
现在有一个表user,属性为name和age
假设查询语句为:
select * from users;
在写JDBC查询的时候,初学者都会这样去编写这样的代码:
public ArrayList<User> selectUsers (String sql) {
// 定义用户数组
List<User> users = new ArrayList<User>
// 获取数据库的连接
// 此处省略配置JDBC的步骤...
Connection conn = getConnected();
// 初始化select语句
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
// 执行查询
ResultSet resultSet = preparedStatement.executeQuery();
// 获取对象
while(resultSet.next()) {
// 创建User对象
User user = new User();
// 设置User对象的属性
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
// 将对象加入到列表中
users.add(user);
}
// 返回用户队列
return users;
}
这里的代码省略了try-catch,但是基本思路大概如此。再看看利用Spring框架搭建出来的代码:
public List<User> selectUsers(String sql) {
// 初始化JdbcTemplate对象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
// 获取属性的映射关系
RowMapper<User> usersMapper = new BeanPropertyRowMapper<>(User.class);
// 获取User对象的列表
List<User> users = jdbcTemplate.query(sql, rowMapper);
// 返回列表
return users;
}
这个applicationContext是需要配置的,但是我们还是看到了Spring框架给我们带来的优势:
-
首先肯定是代码少了,而且初始化jdbcTemplate对象完全可以作为一个初始化方法来调用,这样代码就更少了。
-
将对象的属性编程一种映射关系。好吧,你不知道啥是映射关系,对比上面的代码,我们可以不需要一个个获取对象的属性。要知道我们每次改变对象的属性都要修改这个方法那是多么头疼的事啊。
2、搭建开发环境
-
这里下载Spring的jar包
然后选择一个比较新的版本进行下载就好了。 - 除了Spring的jar包还需要Apache公司的一个Commons logging jar包。
这里下载Commons logging jar - 安装STS(Spring tool suited)
这是在eclipse下安装SpringIDE。具体操作如下:
- 在About eclipse中查看Eclipse版本。
- Eclipse中点击Help->Install new software
- 在Work with中添加地址
http://dist.springsource.com/release/TOOLS/update/e4.6/
注意:后面的e4.6是我eclipse4.6的版本具体看你自己的情况,如果你的是eclipse4.3那就变成e4.3就好。
选中带有SpringIDE后缀的包(如果一起下载比较慢,有可能会出错,你可以一个一个下载然后再重启Eclipse就好了),Accept条款后一路Next,重启Eclipse就有SpringIDE了。
3、第一个项目
1、引入jar
2.、新建Javabean和测试类
Person.java
package test;
public class Person {
private String name;
private int age;
public Person() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + "]";
}
}
package test;
public class Main {
public static void main(String[] args) {
// 新建Person对象
Person person = new Person();
// 设置Person对象属性
person.setName("Hello World");
person.setAge(2333);
// 打印Person对象
System.out.println(person);
}
}
3、配置Spring配置文件
在src目录下 新建Spring Bean Configuration File(在Other中搜索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">
<bean id="ren" class="test.Person">
<property name="name" value="Hello World"></property>
<property name="age" value="2333"></property>
</bean>
</beans>
将Bean注入到IcO容器中。代表的是test.Person
这个Bean。
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
// 导入IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 获取Person对象
Person person = (Person) ctx.getBean("ren");
// 输出Person
System.out.println(person);
}
}