Spring Framework介紹

来源:百度文库 编辑:神马文学网 时间:2024/07/04 21:00:54
Spring是一個屬於java/j2ee的架構級框架,可以適用於java桌面系統或j2ee企業系統。它借助IoC(Inversion of Control)設計模式,對系統的各個模塊Bean進行管理,實現系統的松耦合。借助AOP思想實現以聲明式方式使用企業級服務,例如事務服務。
當系統的各個模塊象一塊塊積木搭建起來之後,Spring就象粘合劑把各個模塊粘合在一起,並進行有效的控制。
Spring框架可以提供一站式的企業應用,包括了在表示層它實現了一個MVC、對JDBC、HIBERNATE等的支持、提供STRUTS的支持。Spring是組件化的,可以使用它提供的所有應用,也可以選用其中的一個或二個組件,在應用中更多是使用它提供的依賴注入Bean管理、事務性管理。
一、應用示例
■通過Spring的配置文件調用類的方法,輸入字符“Hello World”
編寫一個接口類
Public interface Ihello{
public String getHello();
public String getStr();
}
編寫接口實現類
Public class Hello implements Ihello{
private String hello;
public void setHello(String hello){
this.hello=hello;
}
public String getHello() {
return this.hello;
}
public String getStr() {
return "test Spring";
}
}
編寫Spring配置文件AppcontextHello.xml

定義bean



注入

Hello World!!!!!!!!!



編寫輸入類
public class HelloWorld {
public static void main(String[] args) {
AbstractApplicationContext appContext= new ClassPathXmlApplicationContext("/AppcontextHello.xml");
IHello hello=(IHello)appContext.getBean("hello");
System.out.println(hello.getHello());
System.out.println(hello.getStr());
}
}
只要對接口編程,並不用知道是那個類實現了接口,所以如果要更換Hello實現類,只要修改配置文件只可。例如要把Hello換成HelloBaby,接口實現類如下:
private String hello;
public void setHello(String hello){
this.hello=hello;
}
public String getHello() {
return this.hello;
}
public String getStr() {
return "Hello Baby";
}
Spring 配置文件修改如下:

這樣就完成的接口實現類的切換。
■下一個例子將顯示在Spring的Bean管理中注入數據源,實現更強的注入功能,這樣就可以自由地切換不同的數據庫類型和數據源了。
以下的例子將讀取數據表Book的一行記錄。Book有id、bookname(varchar10)、author(varchar10)、price三個字段。
新建值對象Book
public class Book {
private int id;
private String bookname;
private String author;
private float price;
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
//以下省略了部分SET、GET方法
}
新建接口IbookDAO
public interface IbookDAO {
public Book getBook();
}
實現接口的數據訪問類BookDAO
public class BookDAO implements IbookDAO {
private DataSource datasource;
public void setDatasource(DataSource datasource){
this.datasource=datasource;
}
public Book getBook() {
// TODO 自動產生方法 Stub
Book book=new Book();
Connection conn=null;
Statement stmt=null;
ResultSet rs=null;
try{
conn=datasource.getConnection();
stmt=conn.createStatement();
rs=stmt.executeQuery("select top 1 id,bookname,author,price from book");
if(rs.next()){
book.setId(rs.getInt("id"));
book.setBookname(rs.getString("bookname"));
book.setAuthor(rs.getString("author"));
book.setPrice(rs.getFloat("price"));
}
}catch(SQLException e){
e.printStackTrace();
}finally{
try{
if(rs!=null){
rs.close();
rs=null;
}
if(stmt!=null){
stmt.close();
stmt=null;
}
if(conn!=null){
conn.close();
conn=null;
}
}catch(Exception ex){
ex.printStackTrace();
}
}
return book;
}
}
Spring 配置文件AppcontextDataSource.xml



class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

com.microsoft.jdbc.sqlserver.SQLServerDriver

           jdbc:microsoft:sqlserver://222.118.20.108;DatabaseName=zmlftest


dbname


access








以上定義了數據源,定義Bean”bookDAO”時把datasource注入
編寫調用類BookClient
public class BookClient {
public static void main(String[] args) {
AbstractApplicationContext appContext= new ClassPathXmlApplicationContext("/AppcontextDataSource.xml");
IbookDAO bookdao=(IbookDAO)appContext.getBean("bookDAO");
Book book=bookdao.getBook();
System.out.println(book.getId());
System.out.println(book.getBookname());
System.out.println(book.getAuthor());
System.out.println(book.getPrice());
}
}
■利用Spring進行事務管理
該示例演示在一個方法中同時插入二條記錄,當其中一個操作出錯時,進行回滾。
數據訪問接口IbookDAO.java實現一個插入記錄方法。
public interface IbookDAO {
public void saveBook(Book book) throws DataAccessException;
}
數據訪問類BookDAO.java,它擴展了Spring的JDBC基類,方法的代碼變得很簡潔。
public class BookDAO extends JdbcDaoSupport implements IbookDAO{
public void saveBook(Book book) throws DataAccessException {
this.getJdbcTemplate().execute("insert into book(bookname,author,price) values(‘"+book.getBookname()+"‘,‘"+book.getAuthor()+"‘,‘"+book.getPrice()+"‘)");
}
}
業務接口IbookService.java。
public interface IbookService {
public void saveBook()throws DataAccessException;
}
實現業務方法BookService.java
public class BookService implements IbookService {
private IbookDAO bookdao;
public void setBookdao(IbookDAO bookdao){
this.bookdao=bookdao;
}
public void saveBook()throws DataAccessException {
// TODO 自動產生方法 Stub
//AbstractApplicationContext appContext= new ClassPathXmlApplicationContext("/AppcontextTran.xml");
//IbookDAO bookdao=(IbookDAO)appContext.getBean("bookDAO");
Book book1=new Book();
book1.setBookname("bookname1");
book1.setAuthor("author1");
book1.setPrice(Float.parseFloat("1.2"));
Book book2=new Book();
book2.setBookname("bookname2");
book2.setAuthor("author2");
book2.setPrice(Float.parseFloat("2.6"));
bookdao.saveBook(book1);
bookdao.saveBook(book2);
}
}
Spring配置文件AppcontextTran.xml
主要的代碼如下:
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">









class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
lazy-init="true" abstract="true">




PROPAGATION_REQUIRED













客戶端調用BookClient.java
public static void main(String[] args) {
// TODO 自動產生方法 Stub
AbstractApplicationContext appContext= new ClassPathXmlApplicationContext("/AppcontextTran.xml");
IbookService bookservice=(IbookService)appContext.getBean("bookService");
bookservice.saveBook();
System.out.println("成功!!!!!!!!!!");
}