注釋的優勢:
1.最簡單直接的優勢就是減少了配置文件的代碼量。
2.注釋和Java代碼位於一個文件中,而XML 配置采用獨立的配置文件。配置信息和 Java 代碼放在一起,有助於增強程序的內聚性。而采用獨立的XML 配置文件,程序員在編寫一個功能時,往往需要在程序文件和配置文件中不停切換,這種思維上的不連貫會降低開發效率。
SSH 注解組合使用:
這里我推薦用最后一種。
我們在使用注解前先要在applicationContext.xml文件中加入
<!-- 自動掃描包,也會自動注入解釋器,所以不需要 context:annotation-config --> <context:component-scan base-package="news"></context:component-scan>
去掉 context:annotation-config 和用來注入的bean和property
<!-- 原理:自動注入processor解析器,用來解析注解 --> <!-- <context:annotation-config/> --> <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype"> <property name="ns" ref="myNewsService"></property> </bean> <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype"> <property name="nd" ref="myNewsDao"></property> </bean> <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype"> <property name="sf" ref="mySessionFactory" /> </bean>
然后我們在 Action Service Dao 類加入對應的注解@Controller、@Service、@Repository
導入對應包 import org.springframework.stereotype.Controller(Repository Service);
雖然這些只是規范,不對應寫也沒關系,不過養成良好的代碼習慣比較好,建議大家都要這樣寫。
這里我就不一一舉例了,我們只拿Action舉例:
先找到Action類在前面加注解:
@Controller("注入實例的名字")如果不寫默認自動找到對應action類名稱首字母改為小寫
當我們不寫的時候注意struts.xml中把class也改成默認名字:
<action name="NewsAction_*" class="默認名字" method="{1}">
@Scope("prototype")非單例 注意:這個如果不寫單獨運行並不會報錯,多人訪問就會報錯。
然后我用注釋進一步簡化 Action Service Dao 類,去掉里面set方法。
我們只需要在聲明變量的前面加注解@Autowired和@Qualifier("bean的名稱")
需要導入這兩個包:
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
@Autowired可以單獨使用,默認情況下使用 @Autowired 注解會自動注入,Spring 容器中匹配的候選 Bean 數目必須有且僅有一個。當找不到一個匹配的 Bean 時,Spring 容器將拋出BeanCreationException 異常,並指出必須至少擁有一個匹配的。所以我們通過 @Qualifier 注釋指定注入 Bean 的名稱,這樣就可以解決異常。