Spring知识点总结.docx
《Spring知识点总结.docx》由会员分享,可在线阅读,更多相关《Spring知识点总结.docx(24页珍藏版)》请在冰豆网上搜索。
Spring知识点总结
关于spring的几个集合对象介绍
ListFactoryBean
org.springframework.beans.factory.config.ListFactoryBean
ListFactoryBean类为开发者提供了一种在Spring的bean配置文件中创建一个具体的列表集合类(ArrayList和LinkedList)。
这里有一个ListFactoryBean示例,在运行时它将实例化一个ArrayList,并注入到一个bean属性。
1.
2.
3.
4. pechorin@hero.org
5. raskolnikov@slums.org
6. stavrogin@gov.org
7. porfiry@gov.org
8.
9.
10.
配置
java.util.ArrayList
one
2
three
代码
publicclassApp{
publicstaticvoidmain(String[]args){
ApplicationContextcontext=newClassPathXmlApplicationContext(
"applicationContext.xml");
Customercust=(Customer)context.getBean("CustomerBean");
System.out.println(cust);
}
}
结果
Customer[lists=[one,2,three]]Type=[classjava.util.ArrayList]
MapFactoryBean
org.springframework.beans.factory.config.MapFactoryBean
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SetFactoryBean
org.springframework.beans.factory.config.SetFactoryBean
1.
2.
3.
4. pechorin@hero.org
5. raskolnikov@slums.org
6. stavrogin@gov.org
7. porfiry@gov.org
8.
9.
10.
PropertiesFactoryBean
org.springframework.beans.factory.config.PropertiesFactoryBean
通过PropertiesFactoryBean来获取properties配制文件数据
1.
2. com/foo/jdbc-production.properties"/>
3.
PropertyPathFactoryBean
org.springframework.beans.factory.config.PropertyPathFactoryBean
通过PropertyPathFactoryBean来指定属性路径获取属性值
1.
2.
3.
4.
5.
6.
7.
8.
9.
框架介绍
Spring是一个开源框架,Spring是于2003年兴起的一个轻量级的Java开发框架,由RodJohnson在其著作ExpertOne-On-OneJ2EEDevelopmentandDesign中阐述的部分理念和原型衍生而来。
它是为了解决企业应用开发的复杂性而创建的。
框架的主要优势之一就是其分层架构,分层架构允许使用者选择使用哪一个组件,同时为J2EE应用程序开发提供集成的框架。
Spring使用基本的JavaBean来完成以前只可能由EJB完成的事情。
然而,Spring的用途不仅限于服务器端的开发。
从简单性、可测试性和松耦合的角度而言,任何Java应用都可以从Spring中受益。
Spring的核心是控制反转(IoC)和面向切面(AOP)。
简单来说,Spring是一个分层的JavaSE/EEfull-stack(一站式)轻量级开源框架。
框架特征
轻量
——从大小与开销两方面而言Spring都是轻量的。
完整的Spring框架可以在一个大小只有1MB多的JAR文件里发布。
并且Spring所需的处理开销也是微不足道的。
此外,Spring是非侵入式的:
典型地,Spring应用中的对象不依赖于Spring的特定类。
AOP(面向切面)
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
应用对象只实现它们应该做的——完成业务逻辑——仅此而已。
它们并不负责(甚至是意识)其它的系统级关注点,例如日志或事务支持。
IOC(控制反转)
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。
当应用了IoC,一个对象依赖的其它对象会通过被动的方式传递进来,而不是这个对象自己创建或者查找依赖对象。
你可以认为IoC与JNDI相反——不是对象从容器中查找依赖,而是容器在对象初始化时不等对象请求就主动将依赖传递给它。
一般都是调用者依赖被调用者,使用ioc后对象不会被直接调用,而是通过ioc容器来主动提供
容器
——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器,你可以配置你的每个bean如何被创建——基于一个可配置原型(prototype),你的bean可以创建一个单独的实例或者每次需要时都生成一个新的实例——以及它们是如何相互关联的。
然而,Spring不应该被混同于传统的重量级的EJB容器,它们经常是庞大与笨重的,难以使用。
框架
——Spring可以将简单的组件配置、组合成为复杂的应用。
在Spring中,应用对象被声明式地组合,典型地是在一个XML文件里。
Spring也提供了很多基础功能(事务管理、持久化框架集成等等),将应用逻辑的开发留给了你。
MVC
——Spring的作用是整合,但不仅仅限于整合,Spring框架可以被看做是一个企业解决方案级别的框架。
客户端发送请求,服务器控制器(由DispatcherServlet实现的)完成请求的转发,控制器调用一个用于映射的类HandlerMapping,该类用于将请求映射到对应的处理器来处理请求。
HandlerMapping将请求映射到对应的处理器Controller(相当于Action)在Spring当中如果写一些处理器组件,一般实现Controller接口,在Controller中就可以调用一些Service或DAO来进行数据操作ModelAndView用于存放从DAO中取出的数据,还可以存放响应视图的一些数据。
如果想将处理结果返回给用户,那么在Spring框架中还提供一个视图组件ViewResolver,该组件根据Controller返回的标示,找到对应的视图,将响应response返回给用户
Aop是面向对象开发的一种补充,可以在不改变原来的业务逻辑的基础上动态的增加一些功能,比如增加例子异常处理
AOP 面向切面编程。
解耦是程序员编码开发过程中一直追求的。
AOP也是为了解耦所诞生。
AOP在Spring框架中被作为核心组成部分之一,最常见的就是事务控制,日志记录
OOP(面向对象编程)针对业务处理过程的实体及其属性和行为进行抽象封装,以获得更加清晰高效的逻辑单元划分。
而AOP则是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。
这两种设计思想在目标上有着本质的差异。
特点/优点
特点
1.方便解耦,简化开发
通过Spring提供的IoC容器,我们可以将对象之间的依赖关系交由Spring进行控制,避免硬编码所造成的过度程序耦合。
有了Spring,用户不必再为单实例模式类、属性文件解析等这些很底层的需求编写代码,可以更专注于上层的应用。
2.AOP编程的支持
通过Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。
3.声明式事务的支持
在Spring中,我们可以从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量。
优点
1.低侵入式设计,代码污染极低
2.独立于各种应用服务器,基于Spring框架的应用,可以真正实现WriteOnce,RunAnywhere的承诺
3.Spring的DI机制降低了业务对象替换的复杂性,提高了组件之间的解耦
4.Spring的AOP支持允许将一些通用任务如安全、事务、日志等进行集中式管理,从而提供了更好的复用
5.Spring的ORM和DAO提供了与第三方持久层框架的良好整合,并简化了底层的数据库访问
6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架的部分或全部
实现不同类型的参数注入
1.注入直接量
可以通过标签进行注入
2.引入其他bean组件
使用标签[属性一般用bean]
3.注入集合类型的属性
Bean的作用域
Singletton默认值:
Spring以单例模式创建bean的实例,即容器中该bean的实例只有一个
Prototype:
每次从容器中获取bean时都会创建一个实例
Request:
用于web应用环境,针对每次http请求都会创建一个实例
Session:
用于web环境,同一个会话共享一个实例,
Bean注入的方式
属性注入
构造方法注入
在Spring配置文件中实现自动装配
元素的autowire属性提供了一种自动注入依赖对象的机制,配置bean时不需要做任何显式地指定,Spring会自动查找符合条件的依赖对象并实施注入提供了四种自动装配的类型
No:
默认值,Spring默认不进行自动装配,必须显式指定依赖关系
ByName:
根据属性名自动装配,会查找与属性名相同的id,
Bytype根据属性的类型主动装配
Constructor和bytype类似,不过它针对构造方法,如果Spring找到一个bean和构造方法的参数类型相匹配,则通过构造方法注入该依赖对象,找不到抛出异常
Spring常用注解
注解说明
• 注册注解处理器
• 方式一:
bean
AutowiredAnnotationBeanPostProcessor"/>
• 方式二:
命名空间annotation-config/>
annotationconfig/> 将隐式地向Spring 容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor 、 PersistenceAnnotationBeanPostProcessor 以及RequiredAnnotationBeanPostProcessor 这4 个BeanPostProcessor 。
• 方式三:
命名空间component-scan/>
如果要使注解工作,则必须配置component-scan ,实际上不需要再配置annotation-config。
base-package 属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
还允许定义过滤器将基包下的某些类纳入或排除。
启用SpringMVC 注解
• 启动SpringMVC 的注解功能,完成请求和注解POJO 的映射
.
注解介绍
• @Controller
• @Service
• @Autowired
• @RequestMapping
• @RequestParam
• @ModelAttribute
• @Resource
• @Repository
• @Component (不推荐使用)
• @Scope
• @SessionAttributes
• @InitBinder
• @Required
• @Qualifier
1.@Controller
• 例如
@Controller
publicclassSoftCreateControllerextendsSimpleBaseController{}
• 或者
@Controller("softCreateController")
• 说明
@Controller 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写
2.@Service
• 例如
@Service
publicclassSoftCreateServiceImplimplementsISoftCreateService{}
• 或者
@Service("softCreateServiceImpl")
• 说明
@Service 负责注册一个bean 到spring 上下文中,bean 的ID 默认为类名称开头字母小写
3.@Autowired
• 例如
@Autowired
privateISoftPMServicesoftPMService;
• 或者
@Autowired(required=false)
privateISoftPMServicesoftPMService=newSoftPMServiceImpl();
• 说明
@Autowired 根据bean 类型从spring 上线文中进行查找,注册类型必须唯一,否则报异常。
与@Resource 的区别在于,@Resource 允许通过bean 名称或bean 类型两种方式进行查找@Autowired(required=false) 表示,如果spring 上下文中没有找到该类型的bean 时,才会使用newSoftPMServiceImpl();
@Autowired标注作用于Map类型时,如果Map的key为String类型,则Spring会将容器中所有类型符合Map的value对应的类型的Bean增加进来,用Bean的id或name作为Map的key。
@Autowired还有一个作用就是,如果将其标注在BeanFactory类型、ApplicationContext类型、ResourceLoader类型、ApplicationEventPublisher类型、MessageSource类型上,那么Spring会自动注入这些实现类的实例,不需要额外的操作。
4.@RequestMapping
• 类
@Controller
@RequestMapping("/bbtForum.do")
publicclassBbtForumController{
@RequestMapping(params="method=listBoardTopic")
publicStringlistBoardTopic(inttopicId,Useruser){}
}
• 方法
@RequestMapping("/softpg/downSoftPg.do")
@RequestMapping(value="/softpg/ajaxLoadSoftId.do",method=POST)
@RequestMapping(value="/osu/product/detail.do",params={"modify=false"},method=POST)
• 说明
@RequestMapping 可以声明到类或方法上
• 参数绑定说明
如果我们使用以下的 URL 请求:
http:
//localhost/bbtForum.do?
method=listBoardTopic&topicId=1&userId=10&userName=tom
topicIdURL 参数将绑定到 topicId 入参上,而 userId 和 userNameURL 参数将绑定到 user 对象的 userId 和 userName 属性中。
和 URL 请求中不允许没有 topicId 参数不同,虽然 User 的 userId 属性的类型是基本数据类型,但如果 URL 中不存在 userId 参数,Spring 也不会报错,此时 user.userId 值为 0 。
如果 User 对象拥有一个 dept.deptId 的级联属性,那么它将和 dept.deptIdURL 参数绑定。
5.@RequestParam
• 参数绑定说明
@RequestParam("id")
http:
//localhost/bbtForum.do?
method=listBoardTopic&id=1&userId=10&userName=tom
listBoardTopic(@RequestParam("id")inttopicId,Useruser) 中的 topicId 绑定到 id 这个 URL 参数,那么可以通过对入参使用 @Reques