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