Spring3.3——Spring註解配置、Spring+Struts2整合、s2sh整合
1、零配置
步驟:
(1)在配置檔案啟用“零配置”。
使用<context:component-scan .../>元素
(2)為Spring Bean添加註解。
@Component:標註一個普通的Spring Bean類。如果不指定id,預設就該類的類名首字母小寫作為id。<bean id="" class=""/>(使用註解就不需要指定class了)
@Controller:標註一個控制器元件類。
@Service:標註一個業務邏輯元件類。
@Repository:標註一個DAO元件類。
—— 在Java EE應用中,使用這3個註解可能獲得一些額外的好處。
@Scope – 指定Bean的作用域。
相當於scope屬性。
@Resource -配置依賴注入( Spring借用了Java EE的Annotation)。
相當於ref屬性,且該註解直接支援field注入。
@PostConstruct和@PreDestroy(修飾方法,Spring借用了Java EE的Annotation)。
@PostConstruct - 相當於init-method屬性。
@PreDestroy - 相當於destroy-method屬性。
@DependsOn:強制初始化其他Bean
相當於depends-on屬性
@Lazy:指定延遲初始化。
相當於lazy-init屬性
@Autowired與@Qualifier:自動裝配。@Autowired預設是byType的自動裝配。
@Qualifier可指定byName的自動裝配。
相當於autowire屬性
2、Spring+Struts2整合
(1)拷JAR包。(Spring20個包+struts2+commons-logging)
(2)配置Struts 2核心控制器+配置檔案。
(3)配置Web應用在啟動時自動建立Spring容器。
它預設載入WEB-INF/applicationContext.xml作為配置檔案
Spring允許通過contextConfigLocation的引數來指定配置檔名
(4)為第三步的Spring提供配置檔案。
(5)新增Struts 2-Spring整合的外掛包struts2-spring-plugin
------------------以上為安裝步驟,只要做一次---------------------
開發過程:
(1)Action不再主動獲取Service元件;
(2)Action為Service提供的setter方法務必與Service的配置id要對應。(byName)
eg:
目錄結構:
①在appCtx.xml中配置:
<bean id="bookService" class="service.impl.BookServiceImpl"/>
②Action類——BookAction.java
②Book.javapublic class BookAction extends ActionSupport{ private static final long serialVersionUID = 1L; private Book book ; private IBookService bookService; public void setBookService(IBookService bookService) { this.bookService = bookService; } public Book getBook() { return book; } public void setBook(Book book) { this.book = book; } public String add(){ bookService.add(book); return SUCCESS; } }
public class Book {
Integer id;
String name;
String author;
//setter、getter...
}
③BookServiceImpl.java
public class BookServiceImpl implements IBookService{
@Override
public Integer add(Book book) {
System.out.println("模擬新增圖書: "+book.getName());
return 1;
}
}
④struts.xml
<struts>
<!-- 配置Struts2的的字尾 -->
<constant name="struts.action.extension" value="action,,"></constant>
<!-- struts2的開發模式開啟 -->
<constant name="struts.devMode" value="true" />
<package name="bookPkg" namespace="/" extends="struts-default">
<action name="addBook" class="action.BookAction" method="add">
<result name="error">/WEB-INF/view/error.jsp</result>
<result>/WEB-INF/view/list.jsp</result>
</action>
<!-- 通用 -->
<action name="*">
<result>/WEB-INF/view/{1}.jsp</result>
</action>
</package>
</struts>
⑤bookForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>新增圖書</title>
<body>
<div class="container">
<form method="POST" action="addBook">
<div class="form-group">
<label for="bookName">圖書名</label>
<input type="text" class="form-control" id="bookName" placeholder="輸入圖書名"
name="book.name">
</div>
<div class="form-group">
<label for="bookPrice">圖書價格</label>
<input type="text" class="form-control" id="bookPrice" placeholder="輸入圖書價格"
name="book.price">
</div>
<div class="form-group">
<label for="bookAuthor">圖書作者</label>
<input type="text" class="form-control" id="bookAuthor" placeholder="輸入圖書作者"
name="book.author">
</div>
<button type="submit" class="btn btn-default">提交</button>
</form>
</div>
</body>
</html>
⑥測試
3、Struts2+Spring+Hibernate整合
步驟:
(1)配置DataSource和SessionFactory
(2)為第一步提供hibernate.cfg.xml配置檔案
eg:
目錄結構
①
在daoCtx.xml中配置SessionFactory,將dataSource注入sessionFactory
在類路徑下提供hibernate.cfg.xml配置檔案
配置dao實現類,將sessionFactory注入dao中,這樣才能在dao類呼叫sessionFactory
②在appCtx.xml中配置service實現類,將dao注入service中
③在appCtx.xml中配置事務
④BookAction.java
public class BookAction extends ActionSupport{
private static final long serialVersionUID = 1L;
private Book book ;
private IBookService bookService;
private Integer id;
private List<Book> books;
public String add(){
Integer id = bookService.add(book);
if (id > 0)
return SUCCESS;
else
return ERROR;
}
public String delete(){
bookService.delete(id);
return SUCCESS;
}
public String list(){
setBooks(bookService.getAllBooks());
return SUCCESS;
}
public List<Book> getBooks() {
return books;
}
public void setBooks(List<Book> books) {
this.books = books;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Book getBook() {
return book;
}
public void setBook(Book book) {
this.book = book;
}
public void setBookService(IBookService bookService) {
this.bookService = bookService;
}
}
⑤struts.xml
<package name="bookPkg" namespace="/" extends="struts-default">
<action name="addBook" class="action.BookAction" method="add">
<result name="error">/WEB-INF/view/error.jsp</result>
<result>/WEB-INF/view/list.jsp</result>
</action>
<action name="addBookView">
<result>/WEB-INF/view/bookForm.jsp</result>
</action>
<action name="deleteBook" class="action.BookAction" method="delete">
<result type="chain">listBooks</result>
</action>
<action name="listBooks" class="action.BookAction" method="list">
<result>/WEB-INF/view/list.jsp</result>
</action>
<!-- 通用 -->
<action name="*">
<result>/WEB-INF/view/{1}.jsp</result>
</action>
</package>
⑥測試
在執行中使用jstl發現錯誤:
原因:沒有匯入jstl包及standard包