SSH項目(struts+spring+hibernate)搭建_代碼簡化

  在上篇講到SSH框架的搭建後,爲了有利於隨時能熟練的把一個SSH的項目快速的搭建起來,我又進一步對其瞭解學習,對代碼進行了簡化,你們相互討論學習。java

爲何要簡化spring

  若是要作一個大項目,假設項目的action層會有上千個Class類,那就要在spring配置中寫上千個bean目錄,上千個property,這個時候就須要簡化了。app

註解:框架

  註解分爲兩種,一是類的註解,二是類中屬性的註解ide

  註解功能的提供也有二者,一是Spring,二是Jdk    (注意:類的註解只有springframework提供的)學習

註解的做用:spa

  註解,從名字上看是註釋,解釋。但功能卻不單單是註釋那麼簡單。註解(Annotation) 爲咱們在代碼中添加信息提供了一種形式化的方法,是咱們能夠在稍後 某個時刻方便地使用這些數據(經過 解析註解 來使用這些數據),常見的做用有如下幾種:prototype

1.生成文檔。這是最多見的,也是java 最先提供的註解。經常使用的有@see @param @return 等;
2.跟蹤代碼依賴性,實現替代配置文件功能。比較常見的是spring 2.5 開始的基於註解配置。做用就是減小配置。如今的框架基本都使用了這種配置來減小配置文件的數量;
3.在編譯時進行格式檢查。如@Override放在方法前,若是你這個方法並非覆蓋了超類方法,則編譯時就能檢查出;
 
 
 
在這裏,有三種不一樣的簡化,我將講第三種配置實現最簡單化,讓代碼完全跟spring耦合一塊兒。

-----------------------自動裝配bean目錄-----------------------3d

在Spring配置文件中配置註解解析器,Spring會自動的給Class類中定義的屬性裝配beancode

首先:在applicationContext.xml中加入自動掃描包:<context:component-scan base-package="news"></context:component-scan>

 

 

<!-- 自動掃描包,也會自動注入解釋器,因此不須要 context:annotation-config -->
<context:component-scan base-package="news"></context:component-scan>

註解@Autowired和@Qualifier("bean的名稱")

@Autowired   須要導入:import org.springframework.beans.factory.annotation.Autowired;(spring包自帶的)

默認按類型匹配,自動裝配,能夠寫在成員屬性上

public class NewsDaoImpl implements NewsDao {
	
	@Autowired
     @Qualifier("mySessionFactory") private SessionFactory sf; }

 

先找到Action類在前面加註解:

@Controller("注入實例的名字")若是不寫默認自動找到對應action類名稱首字母改成小寫

當咱們不寫的時候注意struts.xml中把class也改爲默認名字:

<action name="NewsAction_*" class="默認名字" method="{1}">

@Scope("prototype")     注意:spring 默認scope 是單例模式這樣只會建立一個Action對象每次訪問都是同一個Action對象,scope="prototype" 能夠保證 當有請求的時候 都建立一個Action對象

 

如下是特殊的(一個bean目錄):

@Controller
@Controller(「Bean的名稱」)

@Controller
@Scope("prototype")
public class NewsAction extends ActionSupport {
	@Autowired
	private NewsService ns;
}

 

@Repository

@Repository(「Bean的名稱」)

@Repository
@Scope("prototype")
public class NewsDaoImpl implements NewsDao {
        @Autowired
	private SessionFactory sf;
}

 

@Service

@Service(「Bean的名稱」) 

@Service
@Scope("prototype")
public class NewsServiceImpl implements NewsService {
    @Autowired
    private NewsDao nd;
}

  

簡化:配置好後,Class類中屬性的setter方法能夠刪除,配置文件中Bean包括property也能夠同時刪除

相關文章
相關標籤/搜索