日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

spring in action 读书笔记

發(fā)布時(shí)間:2023/12/10 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 spring in action 读书笔记 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

IOC?

?

??1.幾個(gè)主要使用的application context. ?

??ClassPathXmlApplicationContext? 從ClassPath路徑加載?

??FileSystemXmlApplicationContext ?從文件系統(tǒng)路徑加載

??XmlWebApplicationContext ? 配置文件黑夜在/WEB-INF/applicationContext.xml,也可以使用setConfigLocation(location)修 改。另外一定還要通過(guò)setServletContext設(shè)置ServletContext對(duì)象

2. ?一個(gè)bean的生命周期

3. spring配置文件的namespace有beans,sop,context,mvc,jms,tx等,通過(guò)指定xml配置文件的schema來(lái)表明當(dāng)前配置文件主要用來(lái)配置哪些

4 一個(gè)bean的scope有singleton,prototype,request,session,global-session幾種

5. ?spring ioc可以通過(guò)方法和屬于進(jìn)行注入,注入的類(lèi)型可以為一個(gè)具體的值,類(lèi)型可以為list,map,set,prop ,null,也可以是對(duì)另外一個(gè)bean的引用,也可以是一個(gè)inner bean,還可以是SpEL語(yǔ)言,比如:

??<property name=”remainder” value=”#{counter.total % counter.count}/>

?

6. ?spring的autowiring的類(lèi)型有byName,byType,constructor,auto detect.

7. ?spring的annotations有 @Component @Controller ?@Respository ?@Service ? @Bean ?@Autowired等

? ? ?在spirng context配置中可配 ?<context:annotation-config />?? <context:component-scan>


AOP?

aop相關(guān)概念 ?http://www.cnblogs.com/dlts26/archive/2013/04/17/2742628.html?

aop面向切面可以用于統(tǒng)一日志記錄、安全控制、緩存等

spring aop只能控制到方法級(jí)別,如果需要控制到屬性,構(gòu)造函數(shù)級(jí)別,需要使用Aspectj.  aspject提供了自己的語(yǔ)言,基于java擴(kuò)展的。

spring aop是在運(yùn)行時(shí)注入的,對(duì)性能會(huì)有影響。而Aspectj支持編譯注入。

spirng aop的可在pointcut時(shí)使用表達(dá)式,與Aspject類(lèi)似。強(qiáng)大的表達(dá)式可指定切入哪些包的哪些類(lèi)的哪些方法。

spring aop支持的Advice有befor,after,after-returning,after-throwing,around.

可傳遞參數(shù)到advice.

基于aop機(jī)制,可實(shí)現(xiàn)不修改源代碼的情況下,指定類(lèi)實(shí)現(xiàn)某接口,其接口的方法由哪個(gè)類(lèi)來(lái)實(shí)現(xiàn),實(shí)際上這個(gè)時(shí)候bean由proxy攔截了調(diào)用.

基于annotation能夠減少大量的代碼的情況下,方便的實(shí)現(xiàn)aop聲明.


database

Spring基于模板方法的Template機(jī)制,把大量重復(fù)不變的數(shù)據(jù)庫(kù)連接,異常處理等封裝起來(lái),而讓spring只需要簡(jiǎn)單的處理業(yè)務(wù)相 關(guān)的數(shù)據(jù)訪問(wèn)。Spring DAO對(duì)不同的數(shù)據(jù)實(shí)現(xiàn)的異常進(jìn)行了高度集成,這樣在使用Hibernate,JPA等框架的時(shí)候,頂層不需要耦合其提供的異常信息?

?

在生產(chǎn)環(huán)境中一定要使用基于緩存池pool的datasource機(jī)制,如果能使用JNDI,盡量使用JNDJ數(shù)據(jù)源,能夠充分利用app server提供的緩存池,而且易于監(jiān)控

Spring針對(duì)不同的持久層機(jī)制提供了不同的Template以及不同的DAO Support classes.

選擇的持久層機(jī)制要充分考慮到性能,Hibernate后續(xù)提升性能不如原生JDBC方便.


Transaction

?聲明式事務(wù) 程序事務(wù),annotation事務(wù)

事務(wù)的隔離級(jí)別 ?isolation ??http://zh.wikipedia.org/wiki/%E4%BA%8B%E5%8B%99%E9%9A%94%E9%9B%A2

Spring針對(duì)不同的底層提供不同的TransactionManger,Ibatis和Jdbc一樣使用 DataSourceTransactionManger

Propagation可設(shè)置事務(wù)傳遞機(jī)制,是否支持事務(wù),是否需要新創(chuàng)建事務(wù)等.

對(duì)應(yīng)C#中的Transaction機(jī)制如下:

http://progtutorials.tripod.com/DotNetTransaction.htm
? [Transaction(?TransactionOption.Supported, Isolation =?TransactionIsolationLevel?.Any, Timeout = 1800)]?

原理類(lèi)似:

一個(gè)事務(wù)協(xié)調(diào)器transaction coordinator負(fù)責(zé)事務(wù)協(xié)調(diào),不同的數(shù)據(jù)資源提供不同的事務(wù)接口,mysql,oracle,mssql分別都會(huì)有自己的事務(wù)機(jī)制,在一個(gè)事務(wù)執(zhí) 行時(shí),當(dāng)所有的資源都返回正確時(shí),coordiantor再讓每個(gè)資源commit,如果有任何一個(gè)出現(xiàn)問(wèn)題,都讓每個(gè)資源roolback.

每個(gè)資源需要記錄自己執(zhí)行過(guò)的操作,以便rooback.

?


Spring MVC

?

?

1. 象其它MVC框架一樣(struts2是基于filter的,struts1.x是基于servlet的),Spring MVC也是通過(guò)一個(gè)Servlet(DispatcherServlet)負(fù)責(zé)接收請(qǐng)求,再轉(zhuǎn)發(fā)調(diào)用Spring自己的Action,Action內(nèi)部執(zhí) 行完成后,會(huì)返回需要顯示的視圖名稱(chēng),DispatcherServlet會(huì)根據(jù)當(dāng)前的不同的視圖引擎來(lái)呈現(xiàn)視圖.

2. DispatcherServlet需要在web.xml里配置,并且配置接受哪些請(qǐng)求,同時(shí)會(huì)根據(jù)名字-servlet.xml加載對(duì)應(yīng)的配置文件

<servlet>

<servlet-name>spitter</servlet-name>

<servlet-class>

org.springframework.web.servlet.DispatcherServlet

</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

<servlet-name>spitter</servlet-name>

<url-pattern>/</url-pattern>

</servlet-mapping>

對(duì)應(yīng)的配置文件就是spitter-Servlet.xml

3. Spring mvc 使用基于annotation方式,大量減少代碼 @Controller ?@RequestMapping

4. 可對(duì)應(yīng)Controller創(chuàng)建Test項(xiàng)目,結(jié)合Mock測(cè)試,@Test

5. Spring mvc前臺(tái)支持不同的View Resolver ,Freemarker ,Velocity, Apache Tite,JasperReport, ? InternalResolverViewResolver通常使用

6. Tite能夠定義頁(yè)面布局,功能強(qiáng)大

7. 需要在web.xml里配置ContextLoaderListener,以便能夠同時(shí)加載Service層以及其它的spring配置文件。

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

默認(rèn)去 WEB-INF目錄下尋找applicationContext.xml ?當(dāng)然也可以通過(guò)context-param配置加載指定的多個(gè)xml

<context-param>

<param-name>contextConfigLocation</param-name>

<param-value>

/WEB-INF/spitter-security.xml

classpath:service-context.xml

classpath:persistence-context.xml

classpath:dataSource-context.xml

</param-value>

</context-param>

8.Spring mvc中可以給整個(gè)Controller設(shè)置RequestMapping,規(guī)定這個(gè)Controller接受這個(gè)請(qǐng)求后的處理

9. 可在action的參數(shù)上直接打標(biāo)簽@Valid,這樣能夠?qū)τ成溥^(guò)來(lái)的實(shí)體進(jìn)行驗(yàn)證,前臺(tái)通過(guò)標(biāo)簽直接顯示錯(cuò)誤信息

10. 在Spring mvc中進(jìn)行文件上傳時(shí),同時(shí)需要配置CommonsMultipartResolver

? ??<bean id=”multipartResolver” class=

“org.springframework.web.multipart.commons.CommonsMultipartResolver”

p:maxUploadSize=”500000″ />


Spring Security

1.Spring Security主要處理兩種場(chǎng)景,一種是控制到URL級(jí)別,主要針對(duì)用戶(hù)請(qǐng)求,基于Servlet Filter控制,另外一種是控制web invocation,基于AOP實(shí)現(xiàn)?

2. Securing Web Request.

? ?在web.xml配置spring的filter代理

<filter>

<filter-name>springSecurityFilterChain</filter-name>

<filter-class>

org.springframework.web.filter.DelegatingFilterProxy

</filter-class>

</filter>

然后在spring配置文件里配置規(guī)則:

<http>

<form-login />

<http-basic />

<logout />

<intercept-url pattern=”/**” access=”ROLE_SPITTER” />

</http>

也可以指定自己的登錄界面,登錄提交url,以及控制的路徑,允許訪問(wèn)的角色

3.Spring提供了前臺(tái)標(biāo)簽,可直接在前臺(tái)讀取當(dāng)前登錄用戶(hù)的一些認(rèn)證信息,也可以讀取權(quán)限來(lái)區(qū)分顯示一些前臺(tái)內(nèi)容。

4.Spring判斷用戶(hù)登錄以及獲取用戶(hù)權(quán)限支持靈活的擴(kuò)展,可支持配置文件,JDBC,LDAP, OpenID等

5.全局開(kāi)啟方法annotation安全驗(yàn)證

<global-method-security secured-annotations=”enabled” />

可直接利用標(biāo)簽通過(guò)AOP機(jī)制對(duì)方法進(jìn)行安全驗(yàn)證。

甚至可以直接控制方法訪問(wèn),通常情況下不符合的話(huà)返回異常,也支持直接退出,還可以對(duì)返回結(jié)果進(jìn)行過(guò)濾

可通過(guò)實(shí)現(xiàn)接口PermissionEvaluator的方法hasPermission,這樣在@PostFilter中可直接控制指定的權(quán)限

需要同時(shí)配置ExpressionHandler

<global-method-security pre-post-annotations=”enabled”>

<expression-handler ref=”expressionHandler”/>

</global-method-security>

<beans:bean id=”expressionHandler” class=

“org.springframework.security.access.expression.method.?DefaultMethodSecurityExpressionHandler”>

<beans:property name=”permissionEvaluator”>

<beans:bean class=

“com.habuma.spitter.security.SpittlePermissionEvaluator” />

</beans:property>

</beans:bean>


Spring Remoting

?

rpc ?? remote ?procedure call

Spring ?supports ? rpc ? via ?several ?remoting ? technologies:?

Remote ?Method ?Invocation (RMI) ?  firewalls aren’t ?a factor

Hessian ?or ? Burlap

HTTP ?invoker

JAX_RPC ?and JAX-WS


?Rest

?

1 .?

? ?Rest == ?Representational State Transfer?

? ? ? ? ?Representational ? ? => ?resources可以為多種表現(xiàn)形式 html ?xml json等

2. ?Rest Verbs ? Post ?Get ?Delete Put ?Option…

3.  Spring Mvc在Action中通過(guò)@RequestMapping ? 設(shè)置method控制不同的Verb,通過(guò)header要求返回的格式,

4.  可以直接通過(guò)@ResponseStatus 返回結(jié)果狀態(tài)

5.

   ? ? ?@RequestMapping(value=”/{username}”,method=RequestMethod.GET,headers={“Accept=text/xml,application/json”})

    ? public ?@RequestBody Spliter ? GetSpliter()

? ? ? ? ?在這里springmvc或根據(jù)header的值,自動(dòng)根據(jù)指定的convert返回對(duì)應(yīng)的結(jié)果

6.   通過(guò)RestTemplate完成RestClient的工作

7.  submit restful form  通過(guò)設(shè)置隱藏屬性_method, 值為Delete,PUT的方式,實(shí)際上還是提交的Post請(qǐng)求。

   通過(guò)在在 DispatcherServlet前設(shè)置 HiddenHttpMethodFilter來(lái)攔截


?JMS

?

1.系統(tǒng)間同步通信的問(wèn)題: ?synchronous communication

? ? ? ? a.  受服務(wù)端請(qǐng)求能力限制,影響client的性能

? ? ? ? b. ? 直接基于接口開(kāi)發(fā),接口變化時(shí)會(huì)產(chǎn)生影響

? ? ? ? c.  client直接指定了service的地址

? ? ? ? d. ? ? ?client依賴(lài)于service的可用性,如果不可用時(shí)會(huì)馬上受到影響

? ?這些問(wèn)題也是asynchronous的優(yōu)勢(shì)

2. 可選擇ActiveMQ作為Message Broker

3. 基于JMSTemplate開(kāi)發(fā)message send

4. ? 為了解決同步receive,基于Message Listener實(shí)現(xiàn)消息到達(dá)時(shí)主動(dòng)通知

<jms:listener-container connection-factory=”connectionFactory”>

<jms:listener destination=”spitter.alert.queue”

ref=”spittleHandler” method=”processSpittle” />

</jms:listener-container>

5.  可以把JMS和remoting service調(diào)用(rpc)相結(jié)合


JMX

?

1. 使用JMX技術(shù)可以管理Spring中的bean,比如運(yùn)行時(shí)設(shè)置一個(gè)bean的屬性的值, JMX+JConsole?

  ? 同時(shí)JMX主要用于監(jiān)控運(yùn)行時(shí)Spring ?bean的屬性

2.?<bean id=”assembler”

class=”org.springframework.jmx.export.assembler.

MethodNameBasedMBeanInfoAssembler”

p:managedMethods=”getSpittlesPerPage,setSpittlesPerPage” />

<bean id=”mbeanExporter”

class=”org.springframework.jmx.export.MBeanExporter”>

<property name=”beans”>

<map>

<entry key=”spitter:name=HomeController”

value-ref=”homeController”/>

</map>

</property>

<property name=”server” ref=”mbeanServer” />

<property name=”assembler” ref=”assembler”/>

</bean>

3.基于annnocation方式

<context:mbean-export server=”mbeanServer” />

@ManagedResource(objectName=”spitter:name=HomeController”)

@ManagedOperation

@ManagedAttribute


Odds?

1. 使用spring中的配置單獨(dú)出來(lái),放到properties文件中

? ? ? ??<context:property-placeholder ? ?location=”classpath:/db.properties” />

? ? ? ? ? ?<bean id=”dataSource”

??? class=”org.springframework.jdbc.d

???? p:driverClassName=”${jdbc.driverC

???? p:url=”${jdbc.url}”

???? p:username=”${jdbc.username}”

???? p:password=”${jdbc.password}” />

? ?或者是annotation形式

? ? ? @Value(“${jdbc.url}”)

? ??String databaseUrl;

? ? ? ? 這樣只需要修改properties文件就可以

? ?Jasypt project可用于一些加密工作,可用于配置文件的加密

2. ? ?JNDI ? ? ?Java Naming and Directory Interface

? ? ? 主要用于存儲(chǔ)和取對(duì)象,比如data source, transaction manager

<jee:jndi-lookup id=”dataSource”

jndi-name=”/jdbc/SpitterDS”

resource-ref=”true”

cache=”false” ? ? //禁用緩存,不然改變必須重新啟動(dòng)

lookup-on-startup=”false” ? // ?延遲加載

proxy-interface=”javax.sql.DataSource” />

可以通過(guò)設(shè)置default-ref,當(dāng)從JNDI獲取失敗時(shí),能夠使用默認(rèn)值

3. ? 可配置使用org.springframework.mail.javamail.JavaMailSenderImpl發(fā)郵件

? ? ? 可以基于VelocityEngine實(shí)現(xiàn)郵件內(nèi)容模板化

4. ?兩種background ?jobs方案

? ? ? ? ? ?? Scheduled jobs

Asynchronous methods

? 在spring配置文件中<task:annotation-driven/> 然后通過(guò)@Scheduled和 @Async來(lái)實(shí)現(xiàn)

? @Async適合?這種“即發(fā)即忘”(fire-and-forget)情況,比如前臺(tái)請(qǐng)求后后臺(tái)直接自己處理就行了


轉(zhuǎn)載于:https://blog.51cto.com/lonely7345/1428102

總結(jié)

以上是生活随笔為你收集整理的spring in action 读书笔记的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。