在上篇講到SSH框架的搭建后,為了有利於隨時能熟練的把一個SSH的項目快速的搭建起來,我又進一步對其了解學習,對代碼進行了簡化,大家相互討論學習。
為什么要簡化:
如果要做一個大項目,假設項目的action層會有上千個Class類,那就要在spring配置中寫上千個bean目錄,上千個property,這個時候就需要簡化了。
注解:
注解分為兩種,一是類的注解,二是類中屬性的注解
注解功能的提供也有兩者,一是Spring,二是Jdk (注意:類的注解只有springframework提供的)
注解的作用:
注解,從名字上看是注釋,解釋。但功能卻不僅僅是注釋那么簡單。注解(Annotation) 為我們在代碼中添加信息提供了一種形式化的方法,是我們可以在稍后 某個時刻方便地使用這些數據(通過 解析注解 來使用這些數據),常見的作用有以下幾種:
-----------------------自動裝配bean目錄-----------------------
在Spring配置文件中配置注解解析器,Spring會自動的給Class類中定義的屬性裝配bean
首先:在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也可以同時刪除
