日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

Spring Framework介紹

 芳草小集 2006-03-24
 

Spring Framework介紹

 Spring是一個屬於java/j2ee的架構(gòu)級框架,可以適用於java桌面系統(tǒng)或j2ee企業(yè)系統(tǒng)。它借助IoC(Inversion of Control)設(shè)計模式,對系統(tǒng)的各個模塊Bean進(jìn)行管理,實現(xiàn)系統(tǒng)的松耦合。借助AOP思想實現(xiàn)以聲明式方式使用企業(yè)級服務(wù),例如事務(wù)服務(wù)。

當(dāng)系統(tǒng)的各個模塊象一塊塊積木搭建起來之後,Spring就象粘合劑把各個模塊粘合在一起,並進(jìn)行有效的控制。

Spring框架可以提供一站式的企業(yè)應(yīng)用,包括了在表示層它實現(xiàn)了一個MVC、對JDBC、HIBERNATE等的支持、提供STRUTS的支持。Spring是組件化的,可以使用它提供的所有應(yīng)用,也可以選用其中的一個或二個組件,在應(yīng)用中更多是使用它提供的依賴注入Bean管理、事務(wù)性管理。

 一、應(yīng)用示例

通過Spring的配置文件調(diào)用類的方法,輸入字符“Hello World”

編寫一個接口類

Public interface Ihello{

        public String getHello();

        public String getStr();

}

編寫接口實現(xiàn)類

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

<?xml version="1.0" encoding="UTF-8"?>

定義bean

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd" >

<beans>

    <bean id="hello" class="com.spring.test.Hello">

注入

        <property name="hello">

            <value>Hello World!!!!!!!!!</value>

        </property>

    </bean>

</beans>

 

編寫輸入類

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());

        }

}

只要對接口編程,並不用知道是那個類實現(xiàn)了接口,所以如果要更換Hello實現(xiàn)類,只要修改配置文件只可。例如要把Hello換成HelloBaby,接口實現(xiàn)類如下:

 

        private String hello;

        public void setHello(String hello){

                this.hello=hello;

        }

        public String getHello() {

                return this.hello;

        }

        public String getStr() {

                return "Hello Baby";

        }

Spring 配置文件修改如下:

<bean id="hello" class="com.spring.test.HelloBaby">

這樣就完成的接口實現(xiàn)類的切換。

 

下一個例子將顯示在SpringBean管理中注入數(shù)據(jù)源,實現(xiàn)更強(qiáng)的注入功能,這樣就可以自由地切換不同的數(shù)據(jù)庫類型和數(shù)據(jù)源了。

以下的例子將讀取數(shù)據(jù)表Book的一行記錄。Bookid、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;

        }

//以下省略了部分SETGET方法

}

 

新建接口IbookDAO

public interface IbookDAO {

        public Book getBook();

 

}

 

實現(xiàn)接口的數(shù)據(jù)訪問類BookDAO

public class BookDAO implements IbookDAO {

        private DataSource datasource;

        public void setDatasource(DataSource datasource){

                this.datasource=datasource;

        }

 

        public Book getBook() {

                // TODO 自動產(chǎn)生方法 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

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www./dtd/spring-beans.dtd" >

<beans>

    <bean id="myDataSource"

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

        <property name="driverClassName">

            <value>com.microsoft.jdbc.sqlserver.SQLServerDriver</value>

        </property>

        <property name="url">           <value>jdbc:microsoft:sqlserver://222.118.20.108;DatabaseName=zmlftest</value>

        </property>

        <property name="username">

            <value>dbname</value>

        </property>

        <property name="password">

            <value>access</value>

        </property>

    </bean>

    <bean id="bookDAO" class="com.spring.test.book.BookDAO">

        <property name="datasource">

            <ref local="myDataSource" />

        </property>

    </bean>

</beans>

以上定義了數(shù)據(jù)源,定義Bean”bookDAO”時把datasource注入

 

編寫調(diào)用類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進(jìn)行事務(wù)管理

該示例演示在一個方法中同時插入二條記錄,當(dāng)其中一個操作出錯時,進(jìn)行回滾。

數(shù)據(jù)訪問接口IbookDAO.java實現(xiàn)一個插入記錄方法。

public interface IbookDAO {

        public void saveBook(Book book) throws DataAccessException;

}

 

數(shù)據(jù)訪問類BookDAO.java,它擴(kuò)展了SpringJDBC基類,方法的代碼變得很簡潔。

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()+"‘)");

        }

}

 

業(yè)務(wù)接口IbookService.java

public interface IbookService {

        public void saveBook()throws DataAccessException;

 

}

 

實現(xiàn)業(yè)務(wù)方法BookService.java

public class BookService implements IbookService {

        private IbookDAO bookdao;

        public void setBookdao(IbookDAO bookdao){

                this.bookdao=bookdao;

        }

 

        public void saveBook()throws DataAccessException {

                // TODO 自動產(chǎn)生方法 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

主要的代碼如下: 

    <bean id="transactionManager"

        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">

        <property name="dataSource">

            <ref local="myDataSource" />

        </property>

    </bean>

    <bean id="bookDAO" class="com.spring.test.tran.BookDAO">

        <property name="dataSource">

            <ref local="myDataSource" />

        </property>

    </bean>

    <bean name="txProxyTemplate"

        class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"

        lazy-init="true" abstract="true">

        <property name="transactionManager" ref="transactionManager" />

        <property name="transactionAttributes">

            <props>

                <prop key="*">

                    PROPAGATION_REQUIRED

                </prop>

            </props>

        </property>

    </bean>

    <bean id="bookService" parent="txProxyTemplate">

        <property name="target">

            <bean class="com.spring.test.tran.BookService">

                <property name="bookdao">

                    <ref local="bookDAO" />

                </property>

            </bean>

        </property>

    </bean>

 

 

客戶端調(diào)用BookClient.java

public static void main(String[] args) {

                // TODO 自動產(chǎn)生方法 Stub

                AbstractApplicationContext appContext= new ClassPathXmlApplicationContext("/AppcontextTran.xml");

                IbookService bookservice=(IbookService)appContext.getBean("bookService");

                bookservice.saveBook();

                System.out.println("成功?。。。。。。。。?!");

        }

 

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多