久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

使用spring注解@Controller @Service @Repository簡(jiǎn)化配置

 落塵伊人 2018-08-14

前言:在web項(xiàng)目中引入spring框架中的配置文件,,我們給每一個(gè)java bean進(jìn)行相關(guān)配置可以非常安全,便捷的管理我們的bean,。那么,,問(wèn)題來(lái)了,如果一個(gè)項(xiàng)目中所涉及到的java bean十分龐大,,而且每一個(gè)bean中的配置都是大同小異的,,那么這份applicationContext.xml文件恐怕是無(wú)能為力了。接下來(lái),,我們使用spring的注解便可以很好的解決這一問(wèn)題,。

首先:我們?yōu)g覽一下我們?cè)嫉腶pplicationContext.xml中的部分配置

復(fù)制代碼
 1   <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype">
 2         <property name="ns" ref="myNewsService"></property>
 3     </bean>
 4     
 5     <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype">
 6         <property name="nd" ref="myNewsDao"></property>
 7     </bean>
 8     
 9     <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype">
10         <property name="sf" ref="mySessionFactory"></property>
11     </bean>
復(fù)制代碼

解析:在這個(gè)代碼段中我們可以看出,我們的控制器也就是我們的action訪問(wèn)的是我們的service層,,而service層則是訪問(wèn)的數(shù)據(jù)層dao,。在這種傳統(tǒng)的寫(xiě)法中每個(gè)類有什么屬性要注入非常明顯,而今天我們要做的就是要簡(jiǎn)化這份配置文件,。

接下來(lái):如果我們把這份配置文件簡(jiǎn)化成這樣

1     <bean id="myNewsAction" class="news.action.NewsAction" scope="prototype"></bean>
2     
3     <bean id="myNewsService" class="news.service.NewsServiceImpl" scope="prototype"></bean>
4     
5     <bean id="myNewsDao" class="news.dao.NewsDaoImpl" scope="prototype"></bean>    

解析:我們只是綁定了每個(gè)bean,,但是并沒(méi)有為其注入屬性。其實(shí)我們是用到了spring的@Autowired,,@Qualifier這兩個(gè)注解

1     @Autowired
2     @Qualifier("mySessionFactory")
3     private SessionFactory sf;    

解析:在@Qualifier這個(gè)注解中我們申明其引用的是哪一個(gè)bean,,spring便會(huì)自動(dòng)為其注入這個(gè)實(shí)例,并且屬性的set方法也可省略

但是:經(jīng)過(guò)上面的一番操作仿佛沒(méi)有給我省多少事,,別急,,認(rèn)真看完本篇博客的人才知道有用的東西在最后。哈哈哈,!

復(fù)制代碼
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www./schema/beans"
 3     xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:p="http://www./schema/p"
 4     xmlns:aop="http://www./schema/aop" xmlns:context="http://www./schema/context"
 5     xmlns:jee="http://www./schema/jee" xmlns:tx="http://www./schema/tx"
 6     xsi:schemaLocation="    
 7             http://www./schema/aop http://www./schema/aop/spring-aop-4.2.xsd  
 8             http://www./schema/beans http://www./schema/beans/spring-beans-4.2.xsd  
 9             http://www./schema/context http://www./schema/context/spring-context-4.2.xsd
10             http://www./schema/jee http://www./schema/jee/spring-jee-4.2.xsd  
11             http://www./schema/tx http://www./schema/tx/spring-tx-4.2.xsd">
12 
13     <!-- 基于news這個(gè)包自動(dòng)掃描其中的類 ,也會(huì)自動(dòng)注入解析器-->
14     <context:component-scan base-package="news"></context:component-scan>
15 
16     <!-- 引入外部屬性文件 -->
17     <context:property-placeholder location="classpath:jdbc.properties" />
18 
19     <bean id="mySessionFactory"
20         class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
21     </bean>
22 
23     <bean id="myDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
24         
25     </bean>
26         
27 </beans>
28     
復(fù)制代碼

解析:從這份applicationContext.xml文件中我們可以明顯的看到我們壓根沒(méi)有給我們的java bean進(jìn)行相關(guān)配置,,只是配置了一些基本的數(shù)據(jù)源,。唯一多了一行

<context:component-scan base-package="news"></context:component-scan>通過(guò)這個(gè)節(jié)點(diǎn)的base-package屬性可以配置spring需要自動(dòng)注入的哪個(gè)基包。
此時(shí)便是spring的@Controller @Service @Repository這三個(gè)注解起作用的時(shí)候了
復(fù)制代碼
1 @Controller("myNewsAction")
2 @Scope("prototype")
3 public class NewsAction extends ActionSupport {
4     
5     @Autowired
6     @Qualifier("myNewsService")
7     private NewsService ns;
復(fù)制代碼
復(fù)制代碼
1 @Service("myNewsService")
2 @Scope("prototype")
3 public class NewsServiceImpl implements NewsService {
4 
5     @Autowired
6     @Qualifier("myNewsDao")
7     private NewsDao nd;
復(fù)制代碼
復(fù)制代碼
1 @Repository("myNewsDao")
2 @Scope("prototype")    
3 public class NewsDaoImpl implements NewsDao {
4     
5     @Autowired
6     @Qualifier("mySessionFactory")
7     private SessionFactory sf;
復(fù)制代碼

解析:①,,注解@Controller為我們的控制器action類的類注解相當(dāng)于applicationContext.xml文件中的bean節(jié)點(diǎn),,而括號(hào)中的值相當(dāng)于bean節(jié)點(diǎn)中的id屬性的屬性值。同理:@Service為我們業(yè)務(wù)層的類注解,,@Repository為數(shù)據(jù)層dao的類注解,。

②,注解 @Scope("prototype") 相當(dāng)于applicationContext.xml文件中bean節(jié)點(diǎn)中scope屬性,,這個(gè)非單例模式注解十分重要,,主要起到線程安全,防止并發(fā)操作時(shí)出現(xiàn)異常的作用

小結(jié):使用spring的類注解和屬性注解確實(shí)能給我們帶來(lái)許多便利,,關(guān)于類屬性的注解其實(shí)jdk javax.annotation.Resource包中便有@Resource注解,。所以,我們當(dāng)然也可以選擇使用jdk的注解,,不過(guò)要注意的是,,千萬(wàn)不要把jdk的注解和spring的注解混用。在軟件系統(tǒng)中,,由于原生的jdk難免存在一些缺陷,,我們?cè)陂_(kāi)發(fā)過(guò)程中往往需要引入各種框架,因此我們的項(xiàng)目便不得不與這些框架耦合在一起,。雖然我們一直不希望我們的代碼出現(xiàn)耦合,,畢竟這只是一種理想狀態(tài)??傊?,輕度耦合一直是我們追求的代碼風(fēng)格。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購(gòu)買(mǎi)等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多