IOC 

 

  1.几个主要使用的application context.

ClassPathXmlApplicationContext  从ClassPath路径加载

FileSystemXmlApplicationContext  从文件系统路径加载

XmlWebApplicationContext   配置文件黑夜在/WEB-INF/applicationContext.xml,也可以使用setConfigLocation(location)修 改。另外一定还要通过setServletContext设置ServletContext对象

2.  一个bean的生命周期

3. spring配置文件的namespace有beans,sop,context,mvc,jms,tx等,通过指定xml配置文件的schema来表明当前配置文件主要用来配置哪些

4 一个bean的scope有singleton,prototype,request,session,global-session几种

5.  spring ioc可以通过方法和属于进行注入,注入的类型可以为一个具体的值,类型可以为list,map,set,prop ,null,也可以是对另外一个bean的引用,也可以是一个inner bean,还可以是SpEL语言,比如:

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

6.  spring的autowiring的类型有byName,byType,constructor,auto detect.

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

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


AOP 

aop相关概念  http://www.cnblogs.com/dlts26/archive/2013/04/17/2742628.html

aop面向切面可以用于统一日志记录、安全控制、缓存等

spring aop只能控制到方法级别,如果需要控制到属性,构造函数级别,需要使用Aspectj.  aspject提供了自己的语言,基于java扩展的。

spring aop是在运行时注入的,对性能会有影响。而Aspectj支持编译注入。

spirng aop的可在pointcut时使用表达式,与Aspject类似。强大的表达式可指定切入哪些包的哪些类的哪些方法。

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

可传递参数到advice.

基于aop机制,可实现不修改源代码的情况下,指定类实现某接口,其接口的方法由哪个类来实现,实际上这个时候bean由proxy拦截了调用.

基于annotation能够减少大量的代码的情况下,方便的实现aop声明.


database

Spring基于模板方法的Template机制,把大量重复不变的数据库连接,异常处理等封装起来,而让spring只需要简单的处理业务相 关的数据访问。Spring DAO对不同的数据实现的异常进行了高度集成,这样在使用Hibernate,JPA等框架的时候,顶层不需要耦合其提供的异常信息

在生产环境中一定要使用基于缓存池pool的datasource机制,如果能使用JNDI,尽量使用JNDJ数据源,能够充分利用app server提供的缓存池,而且易于监控

Spring针对不同的持久层机制提供了不同的Template以及不同的DAO Support classes.

选择的持久层机制要充分考虑到性能,Hibernate后续提升性能不如原生JDBC方便.


Transaction

声明式事务 程序事务,annotation事务

事务的隔离级别  isolation   http://zh.wikipedia.org/wiki/%E4%BA%8B%E5%8B%99%E9%9A%94%E9%9B%A2

Spring针对不同的底层提供不同的TransactionManger,Ibatis和Jdbc一样使用 DataSourceTransactionManger

Propagation可设置事务传递机制,是否支持事务,是否需要新创建事务等.

对应C#中的Transaction机制如下:

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

原理类似:

一个事务协调器transaction coordinator负责事务协调,不同的数据资源提供不同的事务接口,mysql,oracle,mssql分别都会有自己的事务机制,在一个事务执 行时,当所有的资源都返回正确时,coordiantor再让每个资源commit,如果有任何一个出现问题,都让每个资源roolback.

每个资源需要记录自己执行过的操作,以便rooback.


Spring MVC

1. 象其它MVC框架一样(struts2是基于filter的,struts1.x是基于servlet的),Spring MVC也是通过一个Servlet(DispatcherServlet)负责接收请求,再转发调用Spring自己的Action,Action内部执 行完成后,会返回需要显示的视图名称,DispatcherServlet会根据当前的不同的视图引擎来呈现视图.

2. DispatcherServlet需要在web.xml里配置,并且配置接受哪些请求,同时会根据名字-servlet.xml加载对应的配置文件

<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>

对应的配置文件就是spitter-Servlet.xml

3. Spring mvc 使用基于annotation方式,大量减少代码 @Controller  @RequestMapping

4. 可对应Controller创建Test项目,结合Mock测试,@Test

5. Spring mvc前台支持不同的View Resolver ,Freemarker ,Velocity, Apache Tite,JasperReport,   InternalResolverViewResolver通常使用

6. Tite能够定义页面布局,功能强大

7. 需要在web.xml里配置ContextLoaderListener,以便能够同时加载Service层以及其它的spring配置文件。

<listener>

<listener-class>

org.springframework.web.context.ContextLoaderListener

</listener-class>

</listener>

默认去 WEB-INF目录下寻找applicationContext.xml  当然也可以通过context-param配置加载指定的多个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中可以给整个Controller设置RequestMapping,规定这个Controller接受这个请求后的处理

9. 可在action的参数上直接打标签@Valid,这样能够对映射过来的实体进行验证,前台通过标签直接显示错误信息

10. 在Spring mvc中进行文件上传时,同时需要配置CommonsMultipartResolver

<bean id=”multipartResolver” class=

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

p:maxUploadSize=”500000″ />


Spring Security

1.Spring Security主要处理两种场景,一种是控制到URL级别,主要针对用户请求,基于Servlet Filter控制,另外一种是控制web invocation,基于AOP实现

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配置文件里配置规则:

<http>

<form-login />

<http-basic />

<logout />

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

</http>

也可以指定自己的登录界面,登录提交url,以及控制的路径,允许访问的角色

3.Spring提供了前台标签,可直接在前台读取当前登录用户的一些认证信息,也可以读取权限来区分显示一些前台内容。

4.Spring判断用户登录以及获取用户权限支持灵活的扩展,可支持配置文件,JDBC,LDAP, OpenID等

5.全局开启方法annotation安全验证

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

可直接利用标签通过AOP机制对方法进行安全验证。

甚至可以直接控制方法访问,通常情况下不符合的话返回异常,也支持直接退出,还可以对返回结果进行过滤

可通过实现接口PermissionEvaluator的方法hasPermission,这样在@PostFilter中可直接控制指定的权限

需要同时配置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可以为多种表现形式 html  xml json等

2.  Rest Verbs   Post  Get  Delete Put  Option…

3.  Spring Mvc在Action中通过@RequestMapping   设置method控制不同的Verb,通过header要求返回的格式,

4.  可以直接通过@ResponseStatus 返回结果状态

5.

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

      public  @RequestBody Spliter   GetSpliter()

在这里springmvc或根据header的值,自动根据指定的convert返回对应的结果

6.   通过RestTemplate完成RestClient的工作

7.  submit restful form  通过设置隐藏属性_method, 值为Delete,PUT的方式,实际上还是提交的Post请求。

   通过在在 DispatcherServlet前设置 HiddenHttpMethodFilter来拦截


 JMS

 

1.系统间同步通信的问题:  synchronous communication

a.  受服务端请求能力限制,影响client的性能

b.   直接基于接口开发,接口变化时会产生影响

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

d.      client依赖于service的可用性,如果不可用时会马上受到影响

这些问题也是asynchronous的优势

2. 可选择ActiveMQ作为Message Broker

3. 基于JMSTemplate开发message send

4.   为了解决同步receive,基于Message Listener实现消息到达时主动通知

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

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

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

</jms:listener-container>

5.  可以把JMS和remoting service调用(rpc)相结合


JMX

 

1. 使用JMX技术可以管理Spring中的bean,比如运行时设置一个bean的属性的值, JMX+JConsole

    同时JMX主要用于监控运行时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中的配置单独出来,放到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

 主要用于存储和取对象,比如data source, transaction manager

<jee:jndi-lookup id=”dataSource”

jndi-name=”/jdbc/SpitterDS”

resource-ref=”true”

cache=”false”     //禁用缓存,不然改变必须重新启动

lookup-on-startup=”false”   //  延迟加载

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

可以通过设置default-ref,当从JNDI获取失败时,能够使用默认值

3.   可配置使用org.springframework.mail.javamail.JavaMailSenderImpl发邮件

可以基于VelocityEngine实现邮件内容模板化

4.  两种background  jobs方案

Scheduled jobs

Asynchronous methods

在spring配置文件中<task:annotation-driven/> 然后通过@Scheduled和 @Async来实现

@Async适合 这种“即发即忘”(fire-and-forget)情况,比如前台请求后后台直接自己处理就行了

转载于:https://blog.51cto.com/lonely7345/1428102

spring in action 读书笔记相关推荐

  1. Spring In Action读书笔记

    第一章 1.Spring采用4种策略降低Java开发复杂度 基于POJO的轻量级和最小侵入性编程 依赖注入和面向接口实现松耦合 基于切面和惯例进行声明式编程 通过切面和模板减少样板式代码 PS:POJ ...

  2. 《Spring实战》读书笔记--SpringMVC之forward与redirect

    <Spring实战>读书笔记--SpringMVC之forward与redirect 1.forward与redirect介绍 1.1 redirect 重定向,服务器收到请求后发送一个状 ...

  3. LINQ IN ACTION读书笔记:LINQ 使用连接 1、组连接 2、内连接 3、左外连接 4、交叉连接 使用和区别...

    使用的数据源类型: static public class SampleData{static public Publisher[] Publishers ={new Publisher {Name= ...

  4. Machine Learning in Action 读书笔记---第5章 Logistic回归

    Machine Learning in Action 读书笔记 第5章 Logistic回归 文章目录 Machine Learning in Action 读书笔记 一.Logistic回归 1.L ...

  5. Machine Learning in Action 读书笔记---第3章 决策树

    Machine Learning in Action 读书笔记 第3章 决策树 文章目录 Machine Learning in Action 读书笔记 一.决策树算法简介 1 决策树的构造 2 决策 ...

  6. 《Spring实战》读书笔记-第4章 面向切面的Spring

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  7. 《Spring实战》读书笔记-第3章 高级装配

    <Spring实战>是学习Spring框架的一本非常经典的书籍,之前阅读了这本书,只是在书本上写写画画,最近整理了一下<Spring实战>的读书笔记,通过博客的方式进行记录分享 ...

  8. Machine Learning in Action 读书笔记---第4章 基于概率论的分类方法:朴素贝叶斯

    Machine Learning in Action 读书笔记 第4章 基于概率论的分类方法:朴素贝叶斯 文章目录 Machine Learning in Action 读书笔记 一.基于贝叶斯决策理 ...

  9. Machine Learning in Action 读书笔记---第8章 预测数值型数据:回归

    Machine Learning in Action 读书笔记 第8章 预测数值型数据:回归 文章目录 Machine Learning in Action 读书笔记 一.回归 1.回归的一般过程 2 ...

最新文章

  1. go 方法接受者 是指针类型和非指针类型的 区别
  2. java list转成map对象_将List集合中的map对象转为List对象形式--封装类
  3. Ruby:字符集和编码学习总结
  4. 嵌入式开发C语言中的uint8_t
  5. 【51Nod - 1133】不重叠的线段 (贪心)
  6. shell脚本实现自动化备份
  7. 软件测试适合女生学吗?
  8. java 线程map_map集合分割以及多线程处理数据
  9. expec不管异常 try_JUnit测试异常
  10. java实现的判断括号是否成对的代码,()[]{}都可以
  11. torch使用cudnn7
  12. mysql 完整性的概念_MySQL中一些深入概念整理
  13. Win7_D旗舰版_201906 twm000出品
  14. 微信公众平台开发 整合百度云开放平台与微信开放平台
  15. java常见面试题总结2
  16. 【t006】三角形分形描绘问题
  17. UltraEdit 多词搜索
  18. 导入EXCEL2007报错外部表不是预期的格式错误
  19. 12月DB-Engines数据库排名,你猜谁会是第一?
  20. ROM制作图文教程(详细)

热门文章

  1. Linux系统编程——线程(1)
  2. Python打卡第四周
  3. 在vue中methods互相调用的方法
  4. SpringBoot(十三)-- 不同环境下读取不同配置
  5. 查看linux系统核数
  6. cocos2d-x3.6 连连看连通画线
  7. [转载]android设置全屏和无标题
  8. KAFKA分布式消息系统
  9. hdu 4414 Finding crosses
  10. Angular自学笔记(?)DI提供者