1趣席、簡(jiǎn)介
Spring是一個(gè)開源框架寂殉,為簡(jiǎn)化企業(yè)級(jí)應(yīng)用開發(fā)而生的您炉,使用Sprig可以像使簡(jiǎn)單的JavaBean具有以前只有EJB才能實(shí)現(xiàn)的功能役电。
同時(shí)Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(依賴注入)(IoC)(DI)和面向切面(AOP)的容器框架。
優(yōu)點(diǎn)
- 大小與開銷兩方面spring都是輕量級(jí)的冀膝。
- 通過依賴注入的技術(shù)達(dá)到松耦合的目的。
- 提供了面向切面編程的豐富支持麻掸,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)進(jìn)行內(nèi)聚性的開發(fā)赐纱。
- 包含并管理應(yīng)用對(duì)象的配置和生命周期,這個(gè)意義上是一種容器诚隙。
- 將簡(jiǎn)單的組件配置起胰、組合成為復(fù)雜的應(yīng)用,這個(gè)意義上是框架地消。
spring的作用:
- 方便解耦畏妖,簡(jiǎn)介開發(fā)
- 容器
- AOP編程支持(事務(wù)管理、日志等)
- 聲明式事務(wù)的支持
- 提供了對(duì)多種技術(shù)的支持:JMS适瓦、MQ支持谱仪、UnitTest ...
- 提供了眾多方便應(yīng)用的輔助類(JDBCTemplate等)
- 對(duì)主流應(yīng)用框架(Hibernate等)提供了良好的支持否彩。
適用范圍:
- 構(gòu)建企業(yè)應(yīng)用(SpringMVC + Spring + Hibernate/mybatis)。
- 單獨(dú)使用Bean(Bean管理)敬尺。
- 單獨(dú)使用AOP進(jìn)行切面處理贴浙。
- 其他的Spring功能,如對(duì)消息的支持等蜻直。
- 在互聯(lián)網(wǎng)中的應(yīng)用。呼巷。赎瑰。
簡(jiǎn)單來說Spring就是能幫助你更容易開發(fā)后端的東西。在某些場(chǎng)合可以減少很多的配置(例如減少M(fèi)ybatis的配置)压储。
在Spring上開發(fā)應(yīng)用簡(jiǎn)單源譬、方便、快捷芋膘。
模塊組成
圖中的每一個(gè)最小單元霸饲,Spring都至少有一個(gè)對(duì)應(yīng)的 jar 包厚脉。
(1) 核心容器(core container)
- Spring-Core:核心工具類,Spring其他模塊大量使用 Spring-Core傻工。
- Spring-Beans:Spring定義Bean的支持中捆。
- Spring-Context:運(yùn)行時(shí) Spring 容器。
- Spring-Context-Support:Spring 容器對(duì)第三方包的集成支持泄伪。
- Spring-Expression:
(2)AOP
- Spring-AOP
- Spring-Aspects
(3) 消息(messaging)
- Spring-Messaging
(4)Web
- Spring-Web
- Spring-Webmvc
- Spring-WebSocket
- Spring-Webmvc-Portlet:
(5)數(shù)據(jù)訪問 / 集成(Data Access/Integration)
- Spring-JDBC
- Spring-TX
- Spring-ORM
- Spring-OXM
- Spring-JMS
——先來個(gè)例子理解一下蟋滴。
現(xiàn)在有一個(gè)表user,屬性為name和age
假設(shè)查詢語句為:
select * from users;
在寫JDBC查詢的時(shí)候肖粮,初學(xué)者都會(huì)這樣去編寫這樣的代碼:
public ArrayList<User> selectUsers (String sql) {
// 定義用戶數(shù)組
List<User> users = new ArrayList<User>
// 獲取數(shù)據(jù)庫(kù)的連接
// 此處省略配置JDBC的步驟...
Connection conn = getConnected();
// 初始化select語句
PreparedStatement ps = (PreparedStatement) conn.prepareStatement(sql);
// 執(zhí)行查詢
ResultSet resultSet = preparedStatement.executeQuery();
// 獲取對(duì)象
while(resultSet.next()) {
// 創(chuàng)建User對(duì)象
User user = new User();
// 設(shè)置User對(duì)象的屬性
user.setName(resultSet.getString("name"));
user.setAge(resultSet.getInt("age"));
// 將對(duì)象加入到列表中
users.add(user);
}
// 返回用戶隊(duì)列
return users;
}
這里的代碼省略了try-catch尔苦,但是基本思路大概如此。再看看利用Spring框架搭建出來的代碼:
public List<User> selectUsers(String sql) {
// 初始化JdbcTemplate對(duì)象
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) ctx.getBean("jdbcTemplate");
// 獲取屬性的映射關(guān)系
RowMapper<User> usersMapper = new BeanPropertyRowMapper<>(User.class);
// 獲取User對(duì)象的列表
List<User> users = jdbcTemplate.query(sql, rowMapper);
// 返回列表
return users;
}
這個(gè)applicationContext是需要配置的悲龟,但是我們還是看到了Spring框架給我們帶來的優(yōu)勢(shì):
首先肯定是代碼少了冰寻,而且初始化jdbcTemplate對(duì)象完全可以作為一個(gè)初始化方法來調(diào)用,這樣代碼就更少了轻腺。
將對(duì)象的屬性編程一種映射關(guān)系划乖。好吧,你不知道啥是映射關(guān)系误算,對(duì)比上面的代碼迷殿,我們可以不需要一個(gè)個(gè)獲取對(duì)象的屬性。要知道我們每次改變對(duì)象的屬性都要修改這個(gè)方法那是多么頭疼的事啊蚊夫。
2懦尝、搭建開發(fā)環(huán)境
-
這里下載Spring的jar包
然后選擇一個(gè)比較新的版本進(jìn)行下載就好了。 - 除了Spring的jar包還需要Apache公司的一個(gè)Commons logging jar包琅轧。
這里下載Commons logging jar - 安裝STS(Spring tool suited)
這是在eclipse下安裝SpringIDE踊挠。具體操作如下:
- 在About eclipse中查看Eclipse版本。
- Eclipse中點(diǎn)擊Help->Install new software
- 在Work with中添加地址
http://dist.springsource.com/release/TOOLS/update/e4.6/
注意:后面的e4.6是我eclipse4.6的版本具體看你自己的情況,如果你的是eclipse4.3那就變成e4.3就好漠趁。
選中帶有SpringIDE后綴的包(如果一起下載比較慢闯传,有可能會(huì)出錯(cuò),你可以一個(gè)一個(gè)下載然后再重啟Eclipse就好了)字币,Accept條款后一路Next,重啟Eclipse就有SpringIDE了士复。
3翩活、第一個(gè)項(xiàng)目
1、引入jar
2.冗荸、新建Javabean和測(cè)試類
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對(duì)象
Person person = new Person();
// 設(shè)置Person對(duì)象屬性
person.setName("Hello World");
person.setAge(2333);
// 打印Person對(duì)象
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
這個(gè)Bean席楚。
package test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Main {
public static void main(String[] args) {
// 導(dǎo)入IOC容器
ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
// 獲取Person對(duì)象
Person person = (Person) ctx.getBean("ren");
// 輸出Person
System.out.println(person);
}
}