




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
关于spring几种集合对象简介ListFactoryBeanorg.springframework.beans.factory.config.ListFactoryBeanListFactoryBean类为开发者提供了一种在Springbean配备文献中创立一种详细列表集合类(ArrayList和LinkedList)。这里有一种ListFactoryBean示例,在运营时它将实例化一种ArrayList,并注入到一种bean属性。<bean
id="emails"
class="org.springframework.beans.factory.config.ListFactoryBean">
<property
name="sourceList">
<list>
<value></value>
<value></value>
<value></value>
<value></value>
</list>
</property>
</bean>
配备<beanid="CustomerBean"class="mon.Customer"> <propertyname="lists"> <beanclass="org.springframework.beans.factory.config.ListFactoryBean"> <propertyname="targetListClass"> <value>java.util.ArrayList</value> </property> <propertyname="sourceList"> <list> <value>one</value> <value>2</value> <value>three</value> </list> </property> </bean> </property></bean>代码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]MapFactoryBeanorg.springframework.beans.factory.config.MapFactoryBean<bean
id="emails"
class="org.springframework.beans.factory.config.MapFactoryBean">
<property
name="sourceMap">
<map>
<entry
key="pechorin"
value=""/>
<entry
key="raskolnikov"
value=""/>
<entry
key="stavrogin"
value=""/>
<entry
key="porfiry"
value=""/>
</map>
</property>
</bean>
SetFactoryBeanorg.springframework.beans.factory.config.SetFactoryBean<bean
id="emails"
class="org.springframework.beans.factory.config.SetFactoryBean">
<property
name="sourceSet">
<set>
<value></value>
<value></value>
<value></value>
<value></value>
</set>
</property>
</bean>
PropertiesFactoryBeanorg.springframework.beans.factory.config.PropertiesFactoryBean通过PropertiesFactoryBean来获取properties配制文献数据<bean
id="jdbcConfiguration"
class="org.springframework.beans.factory.config.PropertiesFactoryBean">
<property
name="location"
value="classpath:com/foo/perties"/>
</bean>PropertyPathFactoryBeanorg.springframework.beans.factory.config.PropertyPathFactoryBean通过PropertyPathFactoryBean来指定属性途径获取属性值<bean
id="testBean"
class="org.springframework.beans.TestBean"
singleton="false">
<property
name="age"
value="10"/>
<property
name="spouse">
<bean
class="org.springframework.beans.TestBean">
<property
name="age"
value="11"/>
</bean>
</property>
</bean>
<bean
id="testBean.age"
class="org.springframework.beans.factory.config.PropertyPathFactoryBean"/>
框架简介Spring是一种开源框架,Spring是于年兴起一种轻量级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.SpringDI机制减少了业务对象替代复杂性,提高了组件之间解耦4.SpringAOP支持容许将某些通用任务如安全、事务、日记等进行集中式管理,从而提供了更好复用5.SpringORM和DAO提供了与第三方持久层框架良好整合,并简化了底层数据库访问6.Spring并不强制应用完全依赖于Spring,开发者可自由选用Spring框架某些或所有实现不同类型参数注入1.注入直接量可以通过<value>标签进行注入2.引入其她bean组件使用标签<ref>属性普通用bean3.注入集合类型属性<list><set><map><properties>详细配备详见参数Bean作用域Singletton默认值:Spring以单例模式创立bean实例,即容器中该bean实例只有一种Prototype:每次从容器中获取bean时都会创立一种实例Request:用于web应用环境,针对每次http祈求都会创立一种实例Session:用于web环境,同一种会话共享一种实例,Bean注入方式属性注入构造办法注入在Spring配备文献中实现自动装配<bean>元素autowire属性提供了一种自动注入依赖对象机制,配备bean时不需要做任何显式地指定,Spring会自动查找符合条件依赖对象并实行注入提供了四种自动装配类型No:默认值,Spring默认不进行自动装配,必要显式指定依赖关系ByName:依照属性名自动装配,会查找与属性名相似id,Bytype依照属性类型积极装配Constructor和bytype类似,但是它针对构造办法,如果Spring找到一种bean和构造办法参数类型相匹配,则通过构造办法注入该依赖对象,找不到抛出异常Spring惯用注解
注解阐明•
注册注解解决器•
方式一:bean<beanclass="org.springframework.beans.factory.annotation.
AutowiredAnnotationBeanPostProcessor"/>•
方式二:
命名空间<context:annotation-config/><context:annotationconfig/>
将隐式地向Spring
容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor
、
PersistenceAnnotationBeanPostProcessor
以及RequiredAnnotationBeanPostProcessor
这4
个BeanPostProcessor
。•
方式三:
命名空间<context:component-scan/>如果要使注解工作,则必要配备component-scan
,事实上不需要再配备annotation-config。base-package
属性指定了需要扫描类包,类包及其递归子包中所有类都会被解决。还容许定义过滤器将基包下某些类纳入或排除。
启用SpringMVC
注解•
启动SpringMVC
注解功能,完毕祈求和注解POJO
映射.<beanclass="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter"/>
注解简介
•
@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类型时,如果Mapkey为String类型,则Spring会将容器中所有类型符合Mapvalue相应类型Bean增长进来,用Beanid或name作为Mapkey。@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=tomtopicIdURL
参数将绑定到
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=tomlistBoardTopic(@RequestParam("id")inttopicId,Useruser)
中
topicId
绑定到
id
这个
URL
参数,那么可以通过对入参使用
@RequestParam
注解来达到目
@RequestParam(required=false):参数不是必要,默以为true@RequestParam(value="id",required=false)
祈求解决办法入参可选类型
•
Java
基本数据类型和
String
默认状况下将按名称匹配方式绑定到
URL
参数上,可以通过
@RequestParam
注解变化默认绑定规则
•
request/response/session
既可以是
ServletAPI
也可以是
PortletAPI
相应对象,Spring
会将它们绑定到Servlet
和
Portlet
容器相应对象上
•
org.springframework.web.context.request.WebRequest
内部包括了
request
对象
•
java.util.Locale绑定到
request
相应
Locale
对象上
•
java.io.InputStream/java.io.Reader
可以借此访问
request
内容
•
java.io.OutputStream/java.io.Writer可以借此操作
response
内容
•
任何标注了
@RequestParam
注解入参
被标注
@RequestParam
注解入参将绑定到特定
request
参数上。
•
java.util.Map/org.springframework.ui.ModelMap它绑定
SpringMVC
框架中每个祈求所创立潜在模型对象,它们可以被
Web
视图对象访问(如
JSP
)
•
命令/
表单对象(注:普通称绑定使用
HTTPGET
发送
URL
参数对象为命令对象,而称绑定使用HTTPPOST
发送
URL
参数对象为表单对象)
它们属性将以名称匹配规则绑定到
URL
参数上,同步完毕类型转换。
而类型转换规则可以通过
@InitBinder
注解或通过
HandlerAdapter
配备进行调
整
•
org.springframework.validation.Errors/org.springframework.validation.BindingResult
为属性列表中命令/
表单对象校验成果,注意检查成果参数必要紧跟在命令/
表单对象背面
•
org.springframework.web.bind.support.SessionStatus
可以通过该类型
status
对象显式结束表单解决,这相称于触发
session
清除其中通过@SessionAttributes
定义属性
祈求解决办法返回值可选类型•
void此时逻辑视图名由祈求解决办法相应
URL
拟定,如如下办法:
@RequestMapping("/welcome.do")
publicvoidwelcomeHandler(){}
相应逻辑视图名为
“
welcome
”
•
String此时逻辑视图名为返回字符,如如下办法:
@RequestMapping(method=RequestMethod.GET)
publicStringsetupForm(@RequestParam("ownerId")intownerId,ModelMapmodel){Ownerowner=this.clinic.loadOwner(ownerId);
model.addAttribute(owner);
return"ownerForm";}
相应逻辑视图名为
“
ownerForm
”
•
org.springframework.ui.ModelMap和返回类型为
void
同样,逻辑视图名取决于相应祈求
URL
,如下面例子:
@RequestMapping("/vets.do")
publicModelMapvetsHandler(){returnnewModelMap(this.clinic.getVets());}相应逻辑视图名为
“
vets
”
,返回
ModelMap
将被作为祈求相应模型对象,可以在
JSP
视图页面中访问到。
•
ModelAndView
固然还可以是老式
ModelAndView
。
@ModelAttribute
•
作用域:request
•
例如
@RequestMapping("/base/userManageCooper/init.do")
publicStringhandleInit(@ModelAttribute("queryBean")ManagedUsersUser,Modelmodel,){
•
或者
@ModelAttribute("coopMap")//
将coopMap
返回到页
面
publicMap<Long,CooperatorInfo>coopMapItems(){}
•
阐明
@ModelAttribute
声明在属性上,表达该属性value
来源于model
里"queryBean"
,并被保存到model
里@ModelAttribute声明在办法上,表达该办法返回值被保存到model
里
@Resource
•
例如
@Resource
privateDataSourcedataSource;//injectthebeannamed'dataSource'
•
或者
@Resource(name="dataSource")
@Resource(type=DataSource.class)
•
阐明@Resource
默认按bean
name
进行查找,如果没有找到会按type
进行查找,
此时与@Autowired
类
似在没有为@Resource注解显式指定name属性前提下,如果将其标注在BeanFactory类型、ApplicationContext类型、ResourceLoader类型、ApplicationEventPublisher类型、MessageSource类型上,那么Spring会自动注入这些实现类实例,不需要额外操作。此时name属性不需要指定(或者指定为""),否则注入失败;
@Repository•
与@Controller
、@Service
类似,都是向spring
上下文中注册bean
,不在赘述。
@Component
(不推荐使用)•
@Component@Component
是所有受Spring
管理组件通用形式,Spring
还提供了更加细化注解形式:
@Repository
、@Service、@Controller
,它们分别相应存储层Bean
,业务层Bean
,和展示层Bean
。当前版本(2.5
)中,这些注解与@Component
语义是同样,完全通用,
在Spring
后来版本中也许会给它们追加更多语义。
因此,我们推荐使用@Repository
、@Service
、@Controller
来代替@Component
。
@Scope
•
例如
@Scope("session")
@Repository()
publicclassUserSessionBeanimplementsSerializable{}
•
阐明
在使用XML
定义Bean
时,可以通过bean
scope
属性来定义一种Bean
作用范畴,
同样可以通过@Scope
注解来完毕
@Scope中可以指定如下值:
singleton:定义bean范畴为每个spring容器一种实例(默认值)
prototype:定义bean可以被多次实例化(使用一次就创立一次)
request:定义bean范畴是http祈求(springMVC中有效)
session:定义bean范畴是http会话(springMVC中有效)
global-session:定义bean范畴是全局http会话(portlet中有效)
@SessionAttributes•
阐明Spring
容许我们有选取地指定
ModelMap
中哪些属性需要转存到
session
中,
以便下一种祈求属相应
ModelMap
属性列表中还能访问到这些属性。
这一功能是通过类定义处标注
@SessionAttributes
注解来实现。
@SessionAttributes
只能声明在类上,而不能声明在办法上。
•
例如@SessionAttributes("currUser")//
将ModelMap
中属性名为currUser
属性
@SessionAttributes({"attr1","attr2"})
@SessionAttributes(types=User.class)
@SessionAttributes(types={User.class,Dept.class})
@SessionAttributes(types={User.class,Dept.class},value={"attr1","attr2"})@InitBinder•
阐明如果但愿某个属性编辑器仅作用于特定
Controller
,
可以在
Controller
中定义一种标注
@InitBinder
注解办法,
可以在该办法中向
Controller
了注册若干个属性编辑器
•
例如@InitBinder
publicvoidinitBinder(WebDataBinderbinder){SimpleDateFormatdateFormat=newSimpleDateFormat("yyyy-MM-dd");
dateFormat.setLenient(false);
binder.registerCustomEditor(Date.class,newCustomDateEditor(dateFormat,false));}
@Required
•
例如
@required
public
setName(Stringname){}
•
阐明
@
required
负责检查一种bean在初始化时其声明
set办法与否被执行,
当某个被标注了@RequiredSetter办法没有被调用,则Spring在解析时候会抛出异常,以提示开发者对相应属性进行设立。@Required注解只能标注在Setter办法之上。由于依赖注入本质是检查Setter办法与否被调用了,而不是真去检查属性与否赋值了以及赋了什么样值。如果将该注解标注在非setXxxx()类型办法则被忽视。
@Qualifier
•
例如
@Autowired
@Qualifier("softService")
privateISoftPMServicesoftPMService;
•
阐明
使用@Autowired
时,如果找到各种同一类型bean,则会抛异常,此时可以使用
@Qualifier("beanName"),明确指定bean名称进行注入,此时与
@Resource指定name属性作用相似。SSH框架整合知识点环节添加3个框架jar文献,并创立有关配备文献为Hibernate配备数据源对象配备sessionfactory对象实现并配备Dao和service使用Spring简化数据库事务解决,及配备声明式事务管理实现并配备Action2-5部操作属于Spring整合hibernate,环节6属于Spring整合Struts21.在Spring容器中配备c3po数据源当前流行数据源框架有dbcpc3po,当前惯用是c3po需要导入包c3po-.jar在web容器中配备数据源2.配备sessionfactory对象Annotationsessionfactorybean是sessionfactory实现类,它同步支持hibernate中XML和annotation映射配备,mappingResources属性用来指定XML映射文献,如果在开发中配备\\持久化类配备问价非常多时候,可以在mappingLocations属性中使用通配符来匹配各种映射文献3实现并配备Dao和service实现Dao在众多dao中抽取公共代码形成basedao,dao集成basedao,由于basedao接口实现被不同dao继承,因此basedao被声明形成了泛型接口,其中类型T可以在继承时再去拟定,这样就可以让basedao实现各种表持久化功能,核心代码PrivateClass<T>enti
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 木质乐器制作工艺传承考核试卷
- 票务代理行程规划与咨询考核试卷
- 电池制造过程中的市场趋势分析考核试卷
- 木材的天然防腐和抗菌性能考核试卷
- 植物油加工过程中的副产物利用策略考核试卷
- 电视接收设备的智能广告投放系统考核试卷
- 泵的耐高温材料与涂层技术考核试卷
- 有机化学原料的可持续采购策略考核试卷
- 厦门城市职业学院《医学成像原理与图像处理》2023-2024学年第二学期期末试卷
- 萍乡卫生职业学院《文化产业项目策划》2023-2024学年第二学期期末试卷
- 石油石化行业技术进步与市场趋势
- 中医饮食营养学(中医饮食营养学讲稿)
- 驻校教官策划方案
- 医疗垃圾的分类与处理知识培训
- 热点主题作文写作指导:将“不能”变成“能”(审题指导与例文)
- 外科学教学设计的创新方法探索
- 社会工作实务(初级)考前辅导
- 30题安全员岗位常见面试问题含HR问题考察点及参考回答
- 如何正确处理同学之间矛盾班会
- Unit2-课件全新进阶1
- 2023全球主题公园及博物馆报告
评论
0/150
提交评论