最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?Spring框架的注解式開發(fā)你了解嗎

 更新時(shí)間:2022年03月10日 10:58:19   作者:嘿,魚骨頭^O^  
這篇文章主要為大家詳細(xì)介紹了Spring框架的注解式,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助

1. Spring框架的注解式開發(fā)

# Spring框架的注解式(Annotation)開發(fā)
1. 注解式開發(fā)
	定義:通過Spring框架提供的一系列注解來完成項(xiàng)目中快速開發(fā)
	注解:Annotation是java中一種特殊的類 類似于interface 使用時(shí):@注解類名(屬性=參數(shù)) @Param(Mybatis中做參數(shù)綁定的注解)
	注意:Spring框架提供的這些注解日后僅僅能在和Spring去做一系列項(xiàng)目的時(shí)候去用,這是Spring框架為我們提供的。
	為什么Spring框架要提供這么一套注解去幫助我們呢,原因是現(xiàn)有的開發(fā)方式中開發(fā)效率很低下,隨著組件的增多,
	比如UserService、UserAction...大家會發(fā)現(xiàn)在做現(xiàn)有的配置文件進(jìn)行開發(fā)時(shí),每寫一個(gè)業(yè)務(wù)層,就需要在spring.xml
	文件中通過bean標(biāo)簽去注冊,有的時(shí)候忘了在工廠中注冊的時(shí)候,用的時(shí)候還會產(chǎn)生空指針異常問題。所以Spring框架為了讓大家
	專注于業(yè)務(wù)邏輯處理,不想每次開發(fā)一個(gè)組件時(shí)還要去寫一個(gè)配置,每次開發(fā)一個(gè)組件時(shí)還需要寫一個(gè)配置這樣是不是影響了開發(fā)
	效率啊。所以Spring框架就想了,能不能為程序員提供一種便利呢,這種便利就是日后不需要它再做配置就完成工廠創(chuàng)建、注入
	相關(guān)的一些操作,怎么去做呢。所以在Spring中它給我們提供了一系列的相關(guān)注解幫助我們?nèi)プ隹焖匍_發(fā)。
2. spring中的注解
	前置條件:必須在工廠配置文件中完成注解的掃描
			<!--下面這個(gè)標(biāo)簽就是用來做注解掃描的 base-package:指定掃描哪些包的注解-->
			<context:component-scan base-package="com.baizhi"> 
			在用注解的時(shí)候能讓spring框架去看到這些注解或者說去掃描到這些注解,
			那spring框架怎么去讀呢,spring有一個(gè)spring.xml這樣的一個(gè)配置文
			件,是不是得讓加載這個(gè)配置時(shí)要通過這個(gè)配置文件掃描到注解啊。
	1). 創(chuàng)建對象相關(guān)注解
		  @Component注解		通用組件創(chuàng)建注解	父類注解
		  	  作用:用來負(fù)責(zé)對象的創(chuàng)建 ==========> 簡化<bean class="" id="">
		  	  修飾范圍:只能用在類上
		  	  注意:默認(rèn)使用這個(gè)注解在工廠中創(chuàng)建的對象的唯一標(biāo)識為 類名首字母小寫  UserDAOImpl ===> userDAOImpl
		  	  value屬性的作用:用來指定創(chuàng)建的對象在工廠中的唯一標(biāo)識  推薦:存在接口則名字設(shè)置為接口首字母小寫 不存在使用默認(rèn)
		  	  @Component("userDAO") 等價(jià)于 @Component(value = "userDAO")
		   子類注解:沿用了父類注解的一切特性,也就是說下面三個(gè)注解也能用來創(chuàng)建對象
		   		@Repository		作用:一般用來創(chuàng)建DAO中組件的注解
                @Service		作用:一般用來創(chuàng)建Service中組件的注解
                @Controller		作用:一般用來創(chuàng)建Action中組件的注解
	2). 控制對象在工廠中創(chuàng)建次數(shù)		默認(rèn)工廠單例創(chuàng)建
			a. 配置文件修改	<bean class="" id="" scope="singleton|prototype">
			b. 注解如何控制
			@Scope
				作用:	  用來指定對象的創(chuàng)建次數(shù)默認(rèn)單例
				修飾范圍:只能加在類上
				value屬性:singleton 單例 默認(rèn)|prototype 多例
				@Scope("prototype") =====> 等價(jià)于 @Scope(value = "prototype")
				@Scope("singleton") =====> 等價(jià)于 @Scope(value = "singleton")默認(rèn)是單例,如果想設(shè)置為單例,可以不寫
				注意:在管理structs的action時(shí)必須加入@Scope注解值必須為prototype
	3). 屬性注入的相關(guān)注解
			下面兩個(gè)都能用
			a. spring框架提供的	@Autowired :注意 默認(rèn)根據(jù)類型進(jìn)行注入	推薦
			b. javaEE本身就有的	@Resource  :注意 默認(rèn)根據(jù)名字注入,名稱找不到時(shí)自動根據(jù)類型進(jìn)行注入
			修飾范圍:用在類中的成員變量或者是用在類中成員變量的SET方法上
			作用	 :用來完成成員變量的賦值|注入操作
			注意:使用注解進(jìn)行注入時(shí),日后注入的成員變量可以不再提供SET方法
	4). 控制事務(wù)的注解
		@Transactional
			作用:用來給類種方法加入事務(wù)控制 簡化配置文件中 兩段配置 1. 事務(wù)通知及事務(wù)細(xì)粒度配置	2. 簡化事務(wù)切面配置
			修飾范圍:類	| 方法上	局部優(yōu)先原則
            		1. 加載類上	代表類中所有方法加入事務(wù)控制
            		2. 加在方法上 代表當(dāng)前方法加入事務(wù)控制
            		3. 類和方法同時(shí)存在	方法優(yōu)先
            使用要求:如果想要讓@Transactional這個(gè)注解生效必須在配置文件中加入如下注解:
                    <!--開啟注解式事務(wù)生效-->
                    <!--必須是tx結(jié)尾的包下的-->
                    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
            注解屬性:
            @Transactional(propagation = Propagation.SUPPORTS,
                        isolation = Isolation.READ_COMMITTED,
                        rollbackFor = {java.lang.RuntimeException.class},
                        noRollbackFor = {},
                        readOnly = false,
                        timeout = -1)   // 當(dāng)然這些都推薦大家使用默認(rèn),唯獨(dú)有一個(gè)方法有點(diǎn)特殊,就是查詢方法,不需要去明確										  // 的把它加入事務(wù),所以建議在查詢方法上@Transactional(propagation =                                               //Propagation.SUPPORTS)讓它去支持事務(wù)	
 注意:使用了@Transactional注解代理原有配置文件中的創(chuàng)建事務(wù)環(huán)繞通知細(xì)粒度控制和配置事務(wù)切面這兩段配置
    <!--創(chuàng)建事務(wù)環(huán)繞通知并進(jìn)行事務(wù)細(xì)粒度控制-->
    <!--transaction-manager找ref -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="save*"/>
            <tx:method name="update*"/>
            <tx:method name="delete*"/>
            <tx:method name="find*" propagation="SUPPORTS"/>
        </tx:attributes>
    </tx:advice>
    <!--配置事務(wù)切面-->
    <aop:config>
        <aop:pointcut id="pc" expression="execution(* com.baizhi.service.*ServiceImpl.*(..))"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
    </aop:config>
    但是下面的這些配置該寫還得寫
    <!--創(chuàng)建數(shù)據(jù)源-->
    <bean class="com.alibaba.druid.pool.DruidDataSource" id="dataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url" value="jdbc:mysql://localhost:3306/lb?characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="root"/>
    </bean>
    <!--創(chuàng)建sqlSessionFactoy-->
    <bean class="org.mybatis.spring.SqlSessionFactoryBean" id="sqlSessionFactory">
        <!--注入datasource mapperLocations typeAliasesPackage-->
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/baizhi/mapper/*.xml"/>
        <property name="typeAliasesPackage" value="com.baizhi.eneity"/>
    </bean>
    <!--創(chuàng)建DAO-->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--注入sqlSessionFactory dao接口所在包-->
        <!--value要的是sqlSessionFactory在工廠中的名字-->
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <property name="basePackage" value="com.baizhi.dao"/>
    </bean>
    <!--創(chuàng)建事務(wù)管理器-->
    <bean class="org.springframework.jdbc.datasource.DataSourceTransactionManager" id="transactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

1.1 開啟注解掃描配置

	<!--開啟注解掃描-->
  <context:component-scan base-package="com.baizhi"/>

1.2 實(shí)例化相關(guān)注解

# 1. @Component(value="userService")
				修飾范圍:    用在類上
				注解作用:    通用的創(chuàng)建實(shí)例的注解,用來創(chuàng)建當(dāng)前這個(gè)類的實(shí)例
				value屬性:  用來指定創(chuàng)建的對象在工廠中的唯一標(biāo)識   如果不指定默認(rèn)創(chuàng)建對象在工廠中的標(biāo)識為類名首字母小寫
# 2. @Repository 
				修飾范圍:    用在類上
				注解作用:    @component的子類注解專用于DAO組件的創(chuàng)建,通常加在DAO組件上
				value屬性:  用來指定創(chuàng)建的對象在工廠中的唯一標(biāo)識   如果不指定默認(rèn)創(chuàng)建對象在工廠中的標(biāo)識為類名首字母小寫
# 3. @Service
				修飾范圍:    用在類上
				注解作用:    @component的子類注解專用于Service組件的創(chuàng)建,通常加在Service組件上
				value屬性:  用來指定創(chuàng)建的對象在工廠中的唯一標(biāo)識   如果不指定默認(rèn)創(chuàng)建對象在工廠中的標(biāo)識為類名首字母小寫
# 4. @Controller
			    修飾范圍:    用在類上
				注解作用:    @component的子類注解專用于Action組件的創(chuàng)建,通常加在Action組件上
				value屬性:  用來指定創(chuàng)建的對象在工廠中的唯一標(biāo)識   如果不指定默認(rèn)創(chuàng)建對象在工廠中的標(biāo)識為類名首字母小寫
	注:除了以上三種DAO、Service、Action三種組件分別創(chuàng)建時(shí)使用三種子類注解,其余的組件創(chuàng)建時(shí)使用 @Component注解
@Repository("userDAO")
public class UserDAOImpl implements UserDAO{
@Service("userService")public class UserServiceImpl implements UserService{

1.3 控制對象的創(chuàng)建次數(shù)的注解

 # 1. @Scope(value="singleton|prototype")
 			  	修飾范圍:    用在類上
			  	注解作用:    用來控制這個(gè)實(shí)例在工廠中的創(chuàng)建次數(shù)
				value屬性:   singleton為單例,prototype為多例   默認(rèn)單例
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{

1.4 注入相關(guān)的注解

# 1. @Autowired(Spring提供)
				修飾范圍:    用在成員變量或成員變量的GET/SET方法上
				注解作用:	 用來給類中成員變量賦值
				注入原則:    默認(rèn)根據(jù)類型自動注入
# 2. @Resource(JAVAEE提供)
				修飾范圍:    用在成員變量或成員變量的GET/SET方法上
				注解作用:    用來給類中成員變量賦值
				注入原則:    默認(rèn)根據(jù)名稱自動注入名稱找不到根據(jù)類型自動注入
	注意:使用注解進(jìn)行注入時(shí),日后注入的成員變量可以不再提供SET方法
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDAO userDAO;

1.5 控制事務(wù)的相關(guān)注解

# 1. @Transactional
			    修飾范圍:    用在類上主要用在業(yè)務(wù)層組件類上或者是方法上
				注解作用:   用來給類中方法加入事務(wù),當(dāng)類上和方法上同時(shí)存在該注解時(shí)局部優(yōu)先
				注解屬性:    
							propagation  用來控制傳播屬性				賦值時(shí)使用枚舉類
							Isolation    用來控制隔離級別				賦值時(shí)使用枚舉類	一般使用默認(rèn)
							timeout      用來設(shè)置超時(shí)性                 賦值代表超時(shí)時(shí)間	一般使用默認(rèn)
							rollback-for 用來設(shè)置什么異?;貪L			   賦值時(shí)給class	 一般使用默認(rèn)
							norollback-for 用來設(shè)置什么異常不會滾		  賦值時(shí)給class      一般使用默認(rèn)
							readonly     用來設(shè)置事務(wù)讀寫性				true/false       一般使用默認(rèn)
				注意:如果要使用事務(wù)注解在配置文件中必須開啟事務(wù)注解生效加入如下配置:
				    <tx:annotation-driven transaction-manager="transactionManager"></tx:annotation-driven>
	使用事務(wù)相關(guān)注解只可以簡化配置文件中 兩段配置 1. 事務(wù)通知及事務(wù)細(xì)粒度配置	2. 簡化事務(wù)切面配置
	但是其他的比如創(chuàng)建數(shù)據(jù)源、創(chuàng)建sqlSessionFactoy、創(chuàng)建DAO、創(chuàng)建事務(wù)管理器還是要寫的
	因?yàn)閷τ谠?、刪、改的事務(wù)屬性我們一般都使用默認(rèn),在進(jìn)行事務(wù)控制時(shí)只需要在類上加一個(gè)@Transactional即可,屬性不寫即
	代表使用默認(rèn),但是對于查詢方法我們要加入局部注解@Transactional(propagation = Propagation.SUPPORTS)使查詢
	方法支持事務(wù)
// 事務(wù)的使用 一般在給類加控制事務(wù)的注解時(shí),不修改屬性,使用默認(rèn),下面只是為了演示注解的使用
@Service("userService")
@Scope("prototype")
@Transactional(propagation = Propagation.SUPPORTS,
                isolation = Isolation.READ_COMMITTED,
                rollbackFor = {java.lang.RuntimeException.class},
                noRollbackFor = {},
                readOnly = false,
                timeout = -1)   // 當(dāng)然這些都推薦大家使用默認(rèn),唯獨(dú)有一個(gè)方法有點(diǎn)特殊,就是查詢方法,不需要去明確的
                                // 把它加入事務(wù),所以建議在查詢方法上@Transactional(propagation = Propagation.SUPPORTS)
                                // 讓它去支持事務(wù)
public class UserServiceImpl implements UserService{    
// 平常使用
@Service("userService")
@Scope("prototype")
public class UserServiceImpl implements UserService{
    @Autowired
    private UserDAO userDAO;
    public void save(String name) {
        userDAO.save(name);
        System.out.println("Service:" + name);
    }
    @Transactional(propagation = Propagation.SUPPORTS)
    public void find() {
    }
}

注意:在使用控制事務(wù)的注解時(shí),需要給類加上不修改任何屬性的注解@Transactional,另外還需要給find查詢方法加上局部注解@Transactional(propagation = Propagation.SUPPORTS)

總結(jié)

本篇文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!   

相關(guān)文章

  • 全面解讀Java編程中的內(nèi)部類

    全面解讀Java編程中的內(nèi)部類

    這篇文章主要介紹了Java的內(nèi)部類,包括類成員訪問等Java入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • Spring-cloud Feign 的深入理解

    Spring-cloud Feign 的深入理解

    這篇文章主要介紹了Spring-cloud Feign 的深入理解,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-02-02
  • HttpClient實(shí)現(xiàn)調(diào)用外部項(xiàng)目接口工具類的示例

    HttpClient實(shí)現(xiàn)調(diào)用外部項(xiàng)目接口工具類的示例

    下面小編就為大家?guī)硪黄狧ttpClient實(shí)現(xiàn)調(diào)用外部項(xiàng)目接口工具類的示例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java Springboot的目的你知道嗎

    Java Springboot的目的你知道嗎

    在本篇文章中小編給大家分析了Java中Spring Boot的優(yōu)勢以及相關(guān)知識點(diǎn)內(nèi)容,興趣的朋友們可以學(xué)習(xí)參考下,希望能夠給你帶來幫助
    2021-09-09
  • Java單例模式與破壞單例模式概念原理深入講解

    Java單例模式與破壞單例模式概念原理深入講解

    單例模式(Singleton?Pattern)是?Java?中最簡單的設(shè)計(jì)模式之一。這種類型的設(shè)計(jì)模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。這種模式涉及到一個(gè)單一的類,該類負(fù)責(zé)創(chuàng)建自己的對象,同時(shí)確保只有單個(gè)對象被創(chuàng)建
    2023-02-02
  • java計(jì)算兩個(gè)時(shí)間相差天數(shù)的方法匯總

    java計(jì)算兩個(gè)時(shí)間相差天數(shù)的方法匯總

    這篇文章主要介紹了java計(jì)算兩個(gè)時(shí)間相差天數(shù)的方法,感興趣的小伙伴們可以參考一下
    2015-11-11
  • 深入了解java 8的函數(shù)式編程

    深入了解java 8的函數(shù)式編程

    函數(shù)式編程并不是Java新提出的概念,其與指令編程相比,強(qiáng)調(diào)函數(shù)的計(jì)算比指令的計(jì)算更重要;與過程化編程相比,其中函數(shù)的計(jì)算可以隨時(shí)調(diào)用。下面我們來詳細(xì)了解一下吧
    2019-06-06
  • Maven2環(huán)境安裝與準(zhǔn)備工作詳解

    Maven2環(huán)境安裝與準(zhǔn)備工作詳解

    這篇文章主要為大家詳細(xì)介紹了Maven2環(huán)境安裝與準(zhǔn)備工作,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-06-06
  • Spring Boot實(shí)現(xiàn)郵件注冊功能示例代碼

    Spring Boot實(shí)現(xiàn)郵件注冊功能示例代碼

    本篇文章主要介紹了Spring Boot實(shí)現(xiàn)郵件注冊功能示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-05-05
  • SpringBoot啟用GZIP壓縮的代碼工程

    SpringBoot啟用GZIP壓縮的代碼工程

    經(jīng)常我們都會與服務(wù)端進(jìn)行大數(shù)據(jù)量的文本傳輸,例如?JSON?就是常見的一種格式,通過?REST?API?接口進(jìn)行?GET?和?POST?請求,可能會有大量的文本格式數(shù)據(jù)提交、返回,壓縮和解壓在提升網(wǎng)絡(luò)帶寬的同時(shí),會帶來?CPU?資源的損耗,本文介紹了SpringBoot啟用GZIP壓縮的代碼工程
    2024-08-08

最新評論

吉安县| 苍南县| 米易县| 勃利县| 淄博市| 新龙县| 西吉县| 定结县| 壶关县| 皮山县| 乌兰浩特市| 随州市| 增城市| 天峻县| 翁牛特旗| 裕民县| 叙永县| 湘西| 镶黄旗| 十堰市| 边坝县| 金门县| 云霄县| 汾西县| 澄城县| 无棣县| 深州市| 昌平区| 平阳县| 南京市| 秀山| 五河县| 镇康县| 新蔡县| 颍上县| 昭苏县| 昌邑市| 河源市| 永川市| 长兴县| 旬邑县|