Spring知识点总结_第1页
Spring知识点总结_第2页
Spring知识点总结_第3页
Spring知识点总结_第4页
Spring知识点总结_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、关于spring的几个集合对象介绍ListFactoryBeanListFactoryBean类为开发者提供了一种在Spring的bean配置文件中创建一个具体的列表集合类(ArrayList和LinkedList)。这里有一个 ListFactoryBean 示例,在运行时它将实例化一个ArrayList,并注入到一个 bean 属性。1. <bean id="emails" class="org.springframework.beans.factory.config.ListFactoryBean"> &#

2、160;  2.  <property name="sourceList">   3.   <list>   4.    <value></value>   5.    <value></value>   6.    <value&

3、gt;</value>   7.    <value></value>   8.   </list>   9.  </property>  10. </bean> 配置<bean id="CustomerBean" class="mon.Customer"><property name=&

4、quot;lists"><bean class="org.springframework.beans.factory.config.ListFactoryBean"><property name="targetListClass"><value>java.util.ArrayList</value></property><property name="sourceList"><list><value>one</valu

5、e><value>2</value><value>three</value></list></property></bean></property></bean>代码public class App public static void main(String args) ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");Custom

6、er cust = (Customer) context.getBean("CustomerBean");System.out.println(cust);结果Customer lists=one, 2, three Type=class java.util.ArrayListMapFactoryBeanorg.springframework.beans.factory.config.MapFactoryBean1. <bean id="emails" class="org.springframework.beans.

7、factory.config.MapFactoryBean">    2.  <property name="sourceMap">   3.   <map>   4.    <entry key="pechorin" value=""/>  5

8、.    <entry key="raskolnikov" value=""/>  6.    <entry key="stavrogin" value=""/>  7.    <entry key="porfiry"

9、 value=""/>  8.   </map>   9.  </property>  10. </bean>  SetFactoryBeanorg.springframework.beans.factory.config.SetFactoryBean1. <bean id="emails" class="org.spri

10、ngframework.beans.factory.config.SetFactoryBean">  2.  <property name="sourceSet">   3.   <set>   4.    <value></value>   5.    <value></value&g

11、t;   6.    <value></value>   7.    <value></value>   8.   </set>   9.  </property>  10. </bean>  PropertiesFactoryBean通过PropertiesFac

12、toryBean来获取properties配制文件数据1. <bean id="jdbcConfiguration" class="org.springframework.beans.factory.config.PropertiesFactoryBean">  2.  <property name="location" value="classpath:com/foo/perties"/&

13、gt;  3. </bean>PropertyPathFactoryBeanorg.springframework.beans.factory.config.PropertyPathFactoryBean通过PropertyPathFactoryBean来指定属性路径获取属性值1. <bean id="testBean" class="org.springframework.beans.TestBean" singleton="false"> 

14、0;2.  <property name="age" value="10"/>   3.  <property name="spouse">   4.   <bean class="org.springframework.beans.TestBean">   5.    <pr

15、operty name="age" value="11"/>   6.   </bean>   7.  </property>  8. </bean>  9. <bean id="testBean.age" class="org.springframework.beans.factory.config.Prop

16、ertyPathFactoryBean"/>  框架介绍Spring是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中阐述的部分理念和原型衍生而来。它是为了解决企业应用开发的复杂性而创建的。框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为 J2EE 应用程序开发提供集成的框架。Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。然而,Spring的用途

17、不仅限于服务器端的开发。从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。Spring的核心是控制反转(IoC)和面向切面(AOP)。简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开源框架。框架特征轻量从大小与开销两方面而言Spring都是轻量的。完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。并且Spring所需的处理开销也是微不足道的。此外,Spring是非侵入式的:典型地,Spring应用中的对象不依赖于Spring的特定类。AOP(面向切面)面向切面Spring提供了面向切面编程的丰富支持,

18、允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。应用对象只实现它们应该做的完成业务逻辑仅此而已。它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。IOC(控制反转)控制反转Spring通过一种称作控制反转(IoC)的技术促进了低耦合。当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。你可以认为IoC与JNDI相反不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。一般都是调用者依赖被调用者,使用ioc后对象不会被直接调用

19、,而是通过ioc容器来主动提供容器Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例以及它们是如何相互关联的。然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。框架Spring可以将简单的组件配置、组合成为复杂的应用。在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。MVCSp

20、ring的作用是整合,但不仅仅限于整合,Spring 框架可以被看做是一个企业解决方案级别的框架。客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。HandlerMapping 将请求映射到对应的处理器Controller(相当于Action)在Spring 当中如果写一些处理器组件,一般实现Controller 接口,在Controller 中就可以调用一些Service 或DAO 来进行数据操作 ModelAndView 用于存放从DAO 中取出的数据

21、,还可以存放响应视图的一些数据。 如果想将处理结果返回给用户,那么在Spring 框架中还提供一个视图组件ViewResolver,该组件根据Controller 返回的标示,找到对应的视图,将响应response 返回给用户Aop是面向对象开发的一种补充,可以在不改变原来的业务逻辑的基础上动态的增加一些功能,比如增加例子异常处理AOP 面向切面编程。解耦是程序员编码开发过程中一直追求的。AOP也是为了解耦所诞生。AOP 在Spring框架中被作为核心组成部分之一,最常见的就是事务控制,日志记录OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效

22、的逻辑单元划分。而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。这两种设计思想在目标上有着本质的差异。特点/优点特点1.方便解耦,简化开发通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。2.AOP编程的支持通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。3.声明式事务的

23、支持在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。优点1.低侵入式设计,代码污染极低2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现Write Once,Run Anywhere的承诺3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问6.Spring并不强制应用完全依赖于Spring,开发者

24、可自由选用Spring框架的部分或全部实现不同类型的参数注入1.注入直接量可以通过<value>标签进行注入2.引入其他bean组件使用标签<ref>属性一般用bean3.注入集合类型的属性<list><set><map><properties>具体配置详见参数Bean的作用域Singletton默认值:Spring以单例模式创建bean的实例,即容器中该bean的实例只有一个Prototype:每次从容器中获取bean时都会创建一个实例Request:用于web应用环境,针对每次http请求都会创建一个实例Session

25、:用于web环境,同一个会话共享一个实例,Bean注入的方式属性注入构造方法注入在Spring配置文件中实现自动装配<bean>元素的autowire属性提供了一种自动注入依赖对象的机制,配置bean时不需要做任何显式地指定,Spring会自动查找符合条件的依赖对象并实施注入提供了四种自动装配的类型No:默认值,Spring默认不进行自动装配,必须显式指定依赖关系ByName:根据属性名自动装配,会查找与属性名相同的id,Bytype 根据属性的类型主动装配Constructor和bytype类似,不过它针对构造方法,如果Spring找到一个bean和构造方法的参数类型相匹配,则通

26、过构造方法注入该依赖对象,找不到抛出异常Spring常用注解  注解说明 注册注解处理器 方式一:bean<bean class="org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor"/> 方式二: 命名空间<context:annotation-config /><context:annotationconfig /> 将隐式地向Spring 容器

27、注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor 。 方式三: 命名空间<context:component-scan />如果要使注解工作,则必须配置component-scan ,实际上不需要再配

28、置annotation-config。base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。还允许定义过滤器将基包下的某些类纳入或排除。  启用Spring MVC 注解 启动Spring MVC 的注解功能,完成请求和注解POJO 的映射.<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>  注解介绍 

29、              Controller               Service               Autowired 

30、0;             RequestMapping               RequestParam               ModelAttribute

31、               Resource               Repository               Component

32、60;(不推荐使用)               Scope               SessionAttributes              

33、0;InitBinder               Required               Qualifier  1.Controller           &

34、#160;   例如              Controller              public class SoftCreateController extends SimpleBaseController       

35、60;        或者             Controller("softCreateController")               说明      &#

36、160;       Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写  2.Service               例如          

37、    Service              public class SoftCreateServiceImpl implements ISoftCreateService                或者     

38、60;        Service("softCreateServiceImpl")               说明              Service 负责注册一个bean 到spring

39、 上下文中,bean 的ID 默认为类名称开头字母小写  3.Autowired               例如              Autowired        &#

40、160;     private ISoftPMService softPMService;               或者      Autowired(required=false)     private ISoftPMService softPMService = new SoftPMServiceImpl(

41、);           说明    Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。与Resource 的区别在于,Resource 允许通过bean 名称或bean 类型两种方式进行查找Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时, 才会使用n

42、ew SoftPMServiceImpl();Autowired 标注作用于 Map 类型时,如果 Map 的 key 为 String 类型,则 Spring 会将容器中所有类型符合 Map 的 value 对应的类型的 Bean 增加进来,用 Bean 的 id 或 name 作为 Map 的 key。Autowired 还有一个作用就是,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些

43、实现类的实例,不需要额外的操作。 4.RequestMapping 类Controller RequestMapping("/bbtForum.do")public class BbtForumController              RequestMapping(params = "method=listBoardTopic")public String listBoardTopic(int top

44、icId,User user)     方法              RequestMapping("/softpg/downSoftPg.do")              RequestMapping(value="/softpg/ajaxLoadSoftId.do",method = POS

45、T)              RequestMapping(value = "/osu/product/detail.do", params = "modify=false" , method =POST)   说明    RequestMapping 可以声明到类或方法上  参数绑定说明如果我们使用以下的 URL 

46、请求:http:/localhost/bbtForum.do?method=listBoardTopic&topicId=1&userId=10&userName=tomtopicId URL 参数将绑定到 topicId 入参上,而 userId 和 userName URL 参数将绑定到 user 对象的 userId 和 userName 属性中。和 URL 请求中不允许没有 topicId 参数

47、不同,虽然 User 的 userId 属性的类型是基本数据类型,但如果 URL 中不存在 userId 参数,Spring 也不会报错,此时 user.userId 值为 0 。如果 User 对象拥有一个 dept.deptId 的级联属性,那么它将和 dept.deptId URL 参数绑定。 5.RequestParam 参数绑定说明RequestParam("id&q

48、uot;)http:/localhost/bbtForum.do?method=listBoardTopic&id=1&userId=10&userName=tomlistBoardTopic(RequestParam("id")int topicId,User user) 中的 topicId 绑定到 id 这个 URL 参数, 那么可以通过对入参使用 RequestParam 注解来达到目的 RequestParam(required=false)

49、:参数不是必须的,默认为trueRequestParam(value="id",required=false)  请求处理方法入参的可选类型               Java 基本数据类型和 String               &

50、#160;    默认情况下将按名称匹配的方式绑定到 URL 参数上,可以通过 RequestParam 注解改变默认的绑定规则                request/response/session 既可以是 Servlet API 的也可以是 Portlet API 对应的对象,Spring

51、60;会将它们绑定到Servlet 和 Portlet 容器的相应对象上  内部包含了 request 对象 绑定到 request 对应的 Locale 对象上                 可以借此访问 request 的内容 可以借此操作 response 的内

52、容           任何标注了 RequestParam 注解的入参                被标注 RequestParam 注解的入参将绑定到特定的 request 参数上。 它绑定 Spring MVC 框架中每个请求所创建的潜在的模

53、型对象,它们可以被 Web 视图对象访问(如 JSP )           命令/ 表单对象(注:一般称绑定使用 HTTP GET 发送的 URL 参数的对象为命令对象,而称绑定使用HTTP POST 发送的 URL 参数的对象为表单对象)          

54、0;          它们的属性将以名称匹配的规则绑定到 URL 参数上,同时完成类型的转换。                     而类型转换的规则可以通过 InitBinder 注解或通过 HandlerAdapter 的配置进行调 整 &#

55、160;                   为属性列表中的命令/ 表单对象的校验结果,注意检验结果参数必须紧跟在命令/ 表单对象的后面  可以通过该类型 status 对象显式结束表单的处理,这相当于触发 session 清除其中的通过SessionAttributes 定义的属性 请求处理方法返回值的可选类型 void此时逻辑视图名由

56、请求处理方法对应的 URL 确定,如以下的方法:RequestMapping("/welcome.do")public void welcomeHandler() 对应的逻辑视图名为 “ welcome ”  String此时逻辑视图名为返回的字符,如以下的方法:RequestMapping(method = RequestMethod.GET)public String setupForm(RequestParam("ownerId") int ownerId, ModelMap m

57、odel) Owner owner = this.clinic.loadOwner(ownerId);model.addAttribute(owner);return "ownerForm"对应的逻辑视图名为 “ ownerForm ” 和返回类型为 void 一样,逻辑视图名取决于对应请求的 URL ,如下面的例子:RequestMapping("/vets.do")public ModelMap vetsHandler() return new ModelMap(this

58、.clinic.getVets();对应的逻辑视图名为 “ vets ” ,返回的 ModelMap 将被作为请求对应的模型对象,可以在 JSP 视图页面中访问到。  ModelAndView当然还可以是传统的 ModelAndView 。 ModelAttribute               作用域:reques

59、t               例如             RequestMapping("/base/userManageCooper/init.do")             public String handleInit(ModelAttribute("queryBe

60、an") ManagedUser sUser,Model model,)               或者              ModelAttribute("coopMap")/ 将coopMap 返回到页 面  

61、0;        public Map<Long,CooperatorInfo> coopMapItems()               说明 ModelAttribute 声明在属性上,表示该属性的value 来源于model 里"queryBean" ,并被保存到model 里ModelA

62、ttribute声明在方法上,表示该方法的返回值被保存到model 里  Resource               例如              Resource              pr

63、ivate DataSource dataSource; / inject the bean named 'dataSource'               或者 Resource(name="dataSource")Resource(type=DataSource.class)  说明Resource 默认按bean 的name 进行查找,如果没有

64、找到会按type 进行查找,此时与Autowired 类 似在没有为 Resource 注解显式指定 name 属性的前提下,如果将其标注在 BeanFactory 类型、ApplicationContext 类型、ResourceLoader 类型、ApplicationEventPublisher 类型、MessageSource 类型上,那么 Spring 会自动注入这些实现类的实例,不需要额外的操作。此时 name 属性不需要指定 ( 或者指定为""),否则注入失败; Repository 与Controller&#

65、160;、Service 类似,都是向spring 上下文中注册bean ,不在赘述。 Component (不推荐使用) ComponentComponent 是所有受Spring 管理组件的通用形式,Spring 还提供了更加细化的注解形式:  Repository 、Service、Controller ,它们分别对应存储层Bean ,业务层Bean ,和展示层Bean 。目前版本(2.5 )中,这些注解与Component

66、60;的语义是一样的,完全通用, 在Spring 以后的版本中可能会给它们追加更多的语义。 所以,我们推荐使用Repository 、Service 、Controller 来替代Component 。 Scope               例如          &

67、#160;     Scope("session")                Repository()                public class UserSessionBean implementsSerializabl

68、e                 说明 在使用XML 定义Bean 时,可以通过bean 的scope 属性来定义一个Bean 的作用范围,同样可以通过Scope 注解来完成       Scope中可以指定如下值:       sing

69、leton:定义bean的范围为每个spring容器一个实例(默认值)       prototype:定义bean可以被多次实例化(使用一次就创建一次)       request:定义bean的范围是http请求(springMVC中有效)       session:定义bean的范围是http会话(springMVC中有效)       global

70、-session:定义bean的范围是全局http会话(portlet中有效) SessionAttributes 说明Spring 允许我们有选择地指定 ModelMap 中的哪些属性需要转存到 session 中,以便下一个请求属对应的 ModelMap 的属性列表中还能访问到这些属性。这一功能是通过类定义处标注 SessionAttributes 注解来实现的。SessionAttributes 只能声明在类上,而不能声明在方法上。  例如Sessi

71、onAttributes("currUser") / 将ModelMap 中属性名为currUser 的属性SessionAttributes("attr1","attr2")SessionAttributes(types = User.class)SessionAttributes(types = User.class,Dept.class)SessionAttributes(types = User.class,Dept.class,value="attr1","attr

72、2")InitBinder 说明如果希望某个属性编辑器仅作用于特定的 Controller ,可以在 Controller 中定义一个标注 InitBinder 注解的方法,可以在该方法中向 Controller 了注册若干个属性编辑器  例如InitBinderpublic void initBinder(WebDataBinder binder) SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-M

73、M-dd");dateFormat.setLenient(false);binder.registerCustomEditor(Date.class, new CustomDateEditor(dateFormat, false);  Required               例如           &

74、#160;  required                            public  setName(String name)            &#

75、160;   说明               required 负责检查一个bean在初始化时其声明的 set方法是否被执行, 当某个被标注了 Required 的 Setter 方法没有被调用,则 Spring 在解析的时候会抛出异常,以提醒开发者对相应属性进行设置。 Required 注解只能标注在 Setter 方法之上。因为依赖注入的本质是检查 Setter 方法是否被调用了,

76、而不是真的去检查属性是否赋值了以及赋了什么样的值。如果将该注解标注在非 setXxxx() 类型的方法则被忽略。 Qualifier               例如              Autowired              Qualifier("softService")              private ISoftPMService softPMService;           说明    &

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论