Java面試題(Spring/SpringMVC)

90.為什么要使用 spring?

Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架撵渡,它由Rod Johnson創(chuàng)建忱辅。它是為了解決企業(yè)應(yīng)用開發(fā)的復(fù)雜性而創(chuàng)建的豪诲。Spring使用基本的JavaBean來完成以前只可能由EJB完成的事情。

91.解釋一下什么是 aop蝶念?

  • AOP(Aspect-Oriented Programming)指一種程序設(shè)計(jì)范型,該范型以一種稱為切面(aspect)的語言構(gòu)造為基礎(chǔ)芋绸,切面是一種新的模塊化機(jī)制媒殉,用來描述分散在對(duì)象、類或方法中的橫切關(guān)注點(diǎn)(crosscutting concern)摔敛。
  • Spring提供了面向切面編程的豐富支持廷蓉,允許通過分離應(yīng)用的業(yè)務(wù)邏輯與系統(tǒng)級(jí)服務(wù)(例如審計(jì)(auditing)和事務(wù)(transaction)管理)進(jìn)行內(nèi)聚性的開發(fā)。應(yīng)用對(duì)象只實(shí)現(xiàn)它們應(yīng)該做的——完成業(yè)務(wù)邏輯——僅此而已马昙。它們并不負(fù)責(zé)(甚至是意識(shí))其它的系統(tǒng)級(jí)關(guān)注點(diǎn)苦酱,例如日志或事務(wù)支持。

92.解釋一下什么是 ioc给猾?

  • IoC就是(Inversion of Control)疫萤,控制反轉(zhuǎn)。在Java開發(fā)中敢伸,IoC意味著將你設(shè)計(jì)好的類交給系統(tǒng)去控制扯饶,而不是在你的類內(nèi)部控制。這稱為控制反轉(zhuǎn)。
  • Spring通過一種稱作控制反轉(zhuǎn)(IoC)的技術(shù)促進(jìn)了松耦合尾序。當(dāng)應(yīng)用了IoC钓丰,一個(gè)對(duì)象依賴的其它對(duì)象會(huì)通過被動(dòng)的方式傳遞進(jìn)來,而不是這個(gè)對(duì)象自己創(chuàng)建或者查找依賴對(duì)象每币。你可以認(rèn)為IoC與JNDI相反——不是對(duì)象從容器中查找依賴携丁,而是容器在對(duì)象初始化時(shí)不等對(duì)象請(qǐng)求就主動(dòng)將依賴傳遞給它。

93.spring 有哪些主要模塊兰怠?

Spring有七大模塊組成:


20190412160350745.png
  • 核心容器(Spring Core)
      核心容器提供Spring框架的基本功能梦鉴。Spring以bean的方式組織和管理Java應(yīng)用中的各個(gè)組件及其關(guān)系。Spring使用BeanFactory來產(chǎn)生和管理Bean揭保,它是工廠模式的實(shí)現(xiàn)肥橙。BeanFactory使用控制反轉(zhuǎn)(IoC)模式將應(yīng)用的配置和依賴性規(guī)范與實(shí)際的應(yīng)用程序代碼分開。

  • 應(yīng)用上下文(Spring Context)
      Spring上下文是一個(gè)配置文件秸侣,向Spring框架提供上下文信息存筏。Spring上下文包括企業(yè)服務(wù),如JNDI味榛、EJB椭坚、電子郵件、國際化搏色、校驗(yàn)和調(diào)度功能藕溅。

  • Spring面向切面編程(Spring AOP)
      通過配置管理特性,Spring AOP 模塊直接將面向方面的編程功能集成到了 Spring框架中继榆。所以巾表,可以很容易地使 Spring框架管理的任何對(duì)象支持 AOP。Spring AOP 模塊為基于 Spring 的應(yīng)用程序中的對(duì)象提供了事務(wù)管理服務(wù)略吨。通過使用 Spring AOP集币,不用依賴 EJB 組件,就可以將聲明性事務(wù)管理集成到應(yīng)用程序中翠忠。

  • JDBC和DAO模塊(Spring DAO)
      JDBC鞠苟、DAO的抽象層提供了有意義的異常層次結(jié)構(gòu),可用該結(jié)構(gòu)來管理異常處理秽之,和不同數(shù)據(jù)庫供應(yīng)商所拋出的錯(cuò)誤信息当娱。異常層次結(jié)構(gòu)簡化了錯(cuò)誤處理,并且極大的降低了需要編寫的代碼數(shù)量考榨,比如打開和關(guān)閉鏈接跨细。

  • 對(duì)象實(shí)體映射(Spring ORM)
      Spring框架插入了若干個(gè)ORM框架,從而提供了ORM對(duì)象的關(guān)系工具河质,其中包括了Hibernate冀惭、JDO和 IBatis SQL Map等震叙,所有這些都遵從Spring的通用事物和DAO異常層次結(jié)構(gòu)。

  • Web模塊(Spring Web)
      Web上下文模塊建立在應(yīng)用程序上下文模塊之上散休,為基于web的應(yīng)用程序提供了上下文媒楼。所以Spring框架支持與Struts集成,web模塊還簡化了處理多部分請(qǐng)求以及將請(qǐng)求參數(shù)綁定到域?qū)ο蟮墓ぷ鳌?/p>

  • MVC模塊(Spring Web MVC)
      MVC框架是一個(gè)全功能的構(gòu)建Web應(yīng)用程序的MVC實(shí)現(xiàn)戚丸。通過策略接口划址,MVC框架變成為高度可配置的。MVC容納了大量視圖技術(shù)限府,其中包括JSP夺颤、POI等,模型來有JavaBean來構(gòu)成谣殊,存放于m當(dāng)中,而視圖是一個(gè)街口牺弄,負(fù)責(zé)實(shí)現(xiàn)模型姻几,控制器表示邏輯代碼,由c的事情势告。Spring框架的功能可以用在任何J2EE服務(wù)器當(dāng)中蛇捌,大多數(shù)功能也適用于不受管理的環(huán)境。Spring的核心要點(diǎn)就是支持不綁定到特定J2EE服務(wù)的可重用業(yè)務(wù)和數(shù)據(jù)的訪問的對(duì)象咱台,毫無疑問這樣的對(duì)象可以在不同的J2EE環(huán)境络拌,獨(dú)立應(yīng)用程序和測試環(huán)境之間重用。

94.spring 常用的注入方式有哪些回溺?

  • @Configuration把一個(gè)類作為一個(gè)IoC容器春贸,它的某個(gè)方法頭上如果注冊(cè)了@Bean,就會(huì)作為這個(gè)Spring容器中的Bean遗遵。
  • @Scope注解 作用域
  • @Lazy(true) 表示延遲初始化
  • @Service用于標(biāo)注業(yè)務(wù)層組件萍恕、
  • @Controller用于標(biāo)注控制層組件(如struts中的action)
  • @Repository用于標(biāo)注數(shù)據(jù)訪問組件,即DAO組件车要。
  • @Component泛指組件允粤,當(dāng)組件不好歸類的時(shí)候,我們可以使用這個(gè)注解進(jìn)行標(biāo)注翼岁。
  • @Scope用于指定scope作用域的(用在類上)
  • @PostConstruct用于指定初始化方法(用在方法上)
  • @PreDestory用于指定銷毀方法(用在方法上)
  • @DependsOn:定義Bean初始化及銷毀時(shí)的順序
  • @Primary:自動(dòng)裝配時(shí)當(dāng)出現(xiàn)多個(gè)Bean候選者時(shí)类垫,被注解為@Primary的Bean將作為首選者,否則將拋出異常
  • @Autowired 默認(rèn)按類型裝配琅坡,如果我們想使用按名稱裝配悉患,可以結(jié)合@Qualifier注解一起使用。如下:
  • @Autowired @Qualifier("personDaoBean") 存在多個(gè)實(shí)例配合使用
  • @Resource默認(rèn)按名稱裝配榆俺,當(dāng)找不到與名稱匹配的bean才會(huì)按類型裝配购撼。
  • @PostConstruct 初始化注解
  • @PreDestroy 摧毀注解 默認(rèn) 單例 啟動(dòng)就加載
  • @Async異步方法調(diào)用

95.spring 中的 bean 是線程安全的嗎跪削?

Spring框架并沒有對(duì)單例bean進(jìn)行任何多線程的封裝處理。關(guān)于單例bean的線程安全和并發(fā)問題需要開發(fā)者自行去搞定迂求。但實(shí)際上碾盐,大部分的Spring bean并沒有可變的狀態(tài)(比如Serview類和DAO類),所以在某種程度上說Spring的單例bean是線程安全的揩局。如果你的bean有多種狀態(tài)的話(比如 View Model 對(duì)象)毫玖,就需要自行保證線程安全。

最淺顯的解決辦法就是將多態(tài)bean的作用域由“singleton”變更為“prototype”凌盯。

96.spring 支持幾種 bean 的作用域付枫?

當(dāng)通過spring容器創(chuàng)建一個(gè)Bean實(shí)例時(shí),不僅可以完成Bean實(shí)例的實(shí)例化驰怎,還可以為Bean指定特定的作用域阐滩。Spring支持如下5種作用域:

  • singleton:單例模式,在整個(gè)Spring IoC容器中县忌,使用singleton定義的Bean將只有一個(gè)實(shí)例
  • prototype:原型模式掂榔,每次通過容器的getBean方法獲取prototype定義的Bean時(shí),都將產(chǎn)生一個(gè)新的Bean實(shí)例
  • request:對(duì)于每次HTTP請(qǐng)求症杏,使用request定義的Bean都將產(chǎn)生一個(gè)新實(shí)例装获,即每次HTTP請(qǐng)求將會(huì)產(chǎn)生不同的Bean實(shí)例。只有在Web應(yīng)用中使用Spring時(shí)厉颤,該作用域才有效
  • session:對(duì)于每次HTTP Session穴豫,使用session定義的Bean豆?jié){產(chǎn)生一個(gè)新實(shí)例。同樣只有在Web應(yīng)用中使用Spring時(shí)逼友,該作用域才有效
  • globalsession:每個(gè)全局的HTTP Session精肃,使用session定義的Bean都將產(chǎn)生一個(gè)新實(shí)例。典型情況下帜乞,僅在使用portlet context的時(shí)候有效肋杖。同樣只有在Web應(yīng)用中使用Spring時(shí),該作用域才有效挖函。

其中比較常用的是singleton和prototype兩種作用域状植。對(duì)于singleton作用域的Bean,每次請(qǐng)求該Bean都將獲得相同的實(shí)例怨喘。容器負(fù)責(zé)跟蹤Bean實(shí)例的狀態(tài)津畸,負(fù)責(zé)維護(hù)Bean實(shí)例的生命周期行為;如果一個(gè)Bean被設(shè)置成prototype作用域必怜,程序每次請(qǐng)求該id的Bean肉拓,Spring都會(huì)新建一個(gè)Bean實(shí)例,然后返回給程序梳庆。在這種情況下暖途,Spring容器僅僅使用new 關(guān)鍵字創(chuàng)建Bean實(shí)例卑惜,一旦創(chuàng)建成功,容器不在跟蹤實(shí)例驻售,也不會(huì)維護(hù)Bean實(shí)例的狀態(tài)露久。

如果不指定Bean的作用域,Spring默認(rèn)使用singleton作用域欺栗。Java在創(chuàng)建Java實(shí)例時(shí)毫痕,需要進(jìn)行內(nèi)存申請(qǐng);銷毀實(shí)例時(shí)迟几,需要完成垃圾回收消请,這些工作都會(huì)導(dǎo)致系統(tǒng)開銷的增加。因此类腮,prototype作用域Bean的創(chuàng)建臊泰、銷毀代價(jià)比較大。而singleton作用域的Bean實(shí)例一旦創(chuàng)建成功蚜枢,可以重復(fù)使用缸逃。因此,除非必要祟偷,否則盡量避免將Bean被設(shè)置成prototype作用域察滑。

97.spring 自動(dòng)裝配 bean 有哪些方式打厘?

Spring中bean有三種裝配機(jī)制修肠,分別是:

  1. 在xml中顯示配置;
  2. 在java中顯示配置户盯;
  3. 隱式的bean發(fā)現(xiàn)機(jī)制和自動(dòng)裝配嵌施。

98.spring 事務(wù)實(shí)現(xiàn)方式有哪些?

事務(wù):事務(wù)邏輯上的一組操作,組成這組操作的各個(gè)邏輯單元,要么一起成功,要么一起失敗.比如莽鸭,保證數(shù)據(jù)的運(yùn)行不會(huì)說A給B錢,A錢給了B卻沒收到吗伤。

實(shí)現(xiàn)事務(wù)的三種方式:
1.aspectJ AOP實(shí)現(xiàn)事務(wù):
2.事務(wù)代理工廠Bean實(shí)現(xiàn)事務(wù):
3.注解方式實(shí)現(xiàn)事務(wù):
在需要進(jìn)行事務(wù)的方法上增加一個(gè)注解“@Transactional(rollbackFor = MyExepction.class )”

99.說一下 spring 的事務(wù)隔離?

一硫眨、 事務(wù)特性(4種):

  1. 原子性 (atomicity):強(qiáng)調(diào)事務(wù)的不可分割.
  2. 一致性 (consistency):事務(wù)的執(zhí)行的前后數(shù)據(jù)的完整性保持一致.
  3. 隔離性 (isolation):一個(gè)事務(wù)執(zhí)行的過程中,不應(yīng)該受到其他事務(wù)的干擾
  4. 持久性(durability) :事務(wù)一旦結(jié)束,數(shù)據(jù)就持久到數(shù)據(jù)庫
    二足淆、 如果不考慮隔離性引發(fā)安全性問題:
  5. 臟讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)的未提交的數(shù)據(jù)
  6. 不可重復(fù)讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)已經(jīng)提交的 update 的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致.
  7. 虛幻讀 :一個(gè)事務(wù)讀到了另一個(gè)事務(wù)已經(jīng)提交的 insert 的數(shù)據(jù)導(dǎo)致多次查詢結(jié)果不一致.
    三、解決讀問題: 設(shè)置事務(wù)隔離級(jí)別(5種)
  8. DEFAULT 這是一個(gè)PlatfromTransactionManager默認(rèn)的隔離級(jí)別礁阁,使用數(shù)據(jù)庫默認(rèn)的事務(wù)隔離級(jí)別.
  9. 未提交讀(read uncommited) :臟讀巧号,不可重復(fù)讀,虛讀都有可能發(fā)生
  10. 已提交讀 (read commited):避免臟讀姥闭。但是不可重復(fù)讀和虛讀有可能發(fā)生
  11. 可重復(fù)讀 (repeatable read) :避免臟讀和不可重復(fù)讀.但是虛讀有可能發(fā)生.
  12. 串行化的 (serializable) :避免以上所有讀問題.
  • Mysql 默認(rèn):可重復(fù)讀
  • Oracle 默認(rèn):讀已提交


    20190412163126958.png
  1. read uncommited:是最低的事務(wù)隔離級(jí)別丹鸿,它允許另外一個(gè)事務(wù)可以看到這個(gè)事務(wù)未提交的數(shù)據(jù)。
  2. read commited:保證一個(gè)事物提交后才能被另外一個(gè)事務(wù)讀取棚品。另外一個(gè)事務(wù)不能讀取該事物未提交的數(shù)據(jù)靠欢。
  3. repeatable read:這種事務(wù)隔離級(jí)別可以防止臟讀廊敌,不可重復(fù)讀。但是可能會(huì)出現(xiàn)幻象讀门怪。它除了保證一個(gè)事務(wù)不能被另外一個(gè)事務(wù)讀取未提交的數(shù)據(jù)之外還避免了以下情況產(chǎn)生(不可重復(fù)讀)骡澈。
  4. serializable:這是花費(fèi)最高代價(jià)但最可靠的事務(wù)隔離級(jí)別。事務(wù)被處理為順序執(zhí)行薪缆。除了防止臟讀秧廉,不可重復(fù)讀之外,還避免了幻象讀(避免三種)拣帽。
    四疼电、事務(wù)的傳播行為(7種)
    PROPAGION_XXX :事務(wù)的傳播行為
  • 保證同一個(gè)事務(wù)中
  1. PROPAGATION_REQUIRED 支持當(dāng)前事務(wù),如果不存在 就新建一個(gè)(默認(rèn))
    2.PROPAGATION_SUPPORTS 支持當(dāng)前事務(wù)减拭,如果不存在蔽豺,就不使用事務(wù)
  2. PROPAGATION_MANDATORY 支持當(dāng)前事務(wù),如果不存在拧粪,拋出異常
  • 保證沒有在同一個(gè)事務(wù)中
  1. PROPAGATION_REQUIRES_NEW 如果有事務(wù)存在修陡,掛起當(dāng)前事務(wù),創(chuàng)建一個(gè)新的事務(wù)
  2. PROPAGATION_NOT_SUPPORTED 以非事務(wù)方式運(yùn)行可霎,如果有事務(wù)存在魄鸦,掛起當(dāng)前事務(wù)
  3. PROPAGATION_NEVER 以非事務(wù)方式運(yùn)行,如果有事務(wù)存在癣朗,拋出異常
  4. PROPAGATION_NESTED 如果當(dāng)前事務(wù)存在拾因,則嵌套事務(wù)執(zhí)行

100.說一下 spring mvc 運(yùn)行流程?

20190412163441472.png

流程
1旷余、用戶發(fā)送請(qǐng)求至前端控制器DispatcherServlet
2绢记、DispatcherServlet收到請(qǐng)求調(diào)用HandlerMapping處理器映射器。
3正卧、處理器映射器找到具體的處理器蠢熄,生成處理器對(duì)象及處理器攔截器(如果有則生成)一并返回給DispatcherServlet。
4炉旷、DispatcherServlet調(diào)用HandlerAdapter處理器適配器
5签孔、HandlerAdapter經(jīng)過適配調(diào)用具體的處理器(Controller,也叫后端控制器)窘行。
6饥追、Controller執(zhí)行完成返回ModelAndView
7、HandlerAdapter將controller執(zhí)行結(jié)果ModelAndView返回給DispatcherServlet
8抽高、DispatcherServlet將ModelAndView傳給ViewReslover視圖解析器
9判耕、ViewReslover解析后返回具體View
10、DispatcherServlet根據(jù)View進(jìn)行渲染視圖(即將模型數(shù)據(jù)填充至視圖中)翘骂。
11壁熄、DispatcherServlet響應(yīng)用戶

101.spring mvc 有哪些組件帚豪?

微信截圖_20200721145947.png

102.@RequestMapping 的作用是什么?

@RequestMapping
RequestMapping是一個(gè)用來處理請(qǐng)求地址映射的注解草丧,可用于類或方法上狸臣。

103.@Autowired 的作用是什么?

這個(gè)注解就是spring可以自動(dòng)幫你把bean里面引用的對(duì)象的setter/getter方法省略昌执,它會(huì)自動(dòng)幫你set/get烛亦。

<bean id="userDao" class="..."/>
<bean id="userService" class="...">
    <property name="userDao">
      <ref bean="userDao"/>
    </property>
</bean>

這樣你在userService里面要做一個(gè)userDao的setter/getter方法。
但如果你用了@Autowired的話懂拾,你只需要在UserService的實(shí)現(xiàn)類中聲明即可煤禽。

@Autowired
private IUserDao userdao;

目錄:2020最新Java面試題及答案匯總(上)
目錄:2020最新Java面試題及答案匯總(下)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市岖赋,隨后出現(xiàn)的幾起案子檬果,更是在濱河造成了極大的恐慌,老刑警劉巖唐断,帶你破解...
    沈念sama閱讀 218,640評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件选脊,死亡現(xiàn)場離奇詭異,居然都是意外死亡脸甘,警方通過查閱死者的電腦和手機(jī)恳啥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,254評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來丹诀,“玉大人钝的,你說我怎么就攤上這事》奘” “怎么了扁藕?”我有些...
    開封第一講書人閱讀 165,011評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵沮峡,是天一觀的道長疚脐。 經(jīng)常有香客問我,道長邢疙,這世上最難降的妖魔是什么棍弄? 我笑而不...
    開封第一講書人閱讀 58,755評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮疟游,結(jié)果婚禮上呼畸,老公的妹妹穿的比我還像新娘。我一直安慰自己颁虐,他們只是感情好蛮原,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,774評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著另绩,像睡著了一般儒陨。 火紅的嫁衣襯著肌膚如雪花嘶。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,610評(píng)論 1 305
  • 那天蹦漠,我揣著相機(jī)與錄音椭员,去河邊找鬼。 笑死笛园,一個(gè)胖子當(dāng)著我的面吹牛隘击,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播研铆,決...
    沈念sama閱讀 40,352評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼埋同,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了棵红?” 一聲冷哼從身側(cè)響起莺禁,我...
    開封第一講書人閱讀 39,257評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窄赋,沒想到半個(gè)月后哟冬,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,717評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡忆绰,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,894評(píng)論 3 336
  • 正文 我和宋清朗相戀三年浩峡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片错敢。...
    茶點(diǎn)故事閱讀 40,021評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡翰灾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出稚茅,到底是詐尸還是另有隱情纸淮,我是刑警寧澤,帶...
    沈念sama閱讀 35,735評(píng)論 5 346
  • 正文 年R本政府宣布亚享,位于F島的核電站咽块,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏欺税。R本人自食惡果不足惜侈沪,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,354評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望晚凿。 院中可真熱鬧亭罪,春花似錦、人聲如沸歼秽。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,936評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至箩祥,卻和暖如春呻惕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背滥比。 一陣腳步聲響...
    開封第一講書人閱讀 33,054評(píng)論 1 270
  • 我被黑心中介騙來泰國打工亚脆, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人盲泛。 一個(gè)月前我還...
    沈念sama閱讀 48,224評(píng)論 3 371
  • 正文 我出身青樓濒持,卻偏偏與公主長得像,于是被迫代替她去往敵國和親寺滚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子柑营,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,974評(píng)論 2 355