spring文档Word文件下载.docx
《spring文档Word文件下载.docx》由会员分享,可在线阅读,更多相关《spring文档Word文件下载.docx(27页珍藏版)》请在冰点文库上搜索。
return"
FooNameis:
"
+this.name;
}
Set和get方法
}
代码清单2Bar.javaBar对象有一个String类型的add属性.
packagecom.tony.test;
publicclassBar{
privateStringadd;
BarAddis:
+this.add;
代码清单3Main.javaMain对象有两个属性分别是Foo和Bar
publicclassMain{
privateFoofoo;
privateBarbar;
publicStringtoString(){
return"
Main:
["
+this.foo.toStirng()+"
"
+this.bar.toStirng()+"
]"
;
代码清单4配置文件spring-config-beans.xml
<
beanid="
main"
class="
com.tony.test.Main"
>
<
propertyname="
foo"
ref="
<
/property>
bar"
/bean>
com.tony.test.Foo"
name"
value="
Foo"
com.tony.test.Bar"
add"
Bar"
代码清单5Test.javaTest类用于初始化Spring容器并获得main对象
importorg.springframework.context.ApplicationContext;
importorg.springframework.context.support.
ClassPathXmlApplicationContext;
publicclassTest{
publicstaticvoidmain(String[]args){
String[]locations={"
spring-config-beans.xml"
};
ApplicationContextctx=newClassPathXmlApplicationContext(locations);
Mainmain=(Main)ctx.getBean("
);
System.out.println(main);
}
运行Test类控制台输出以下信息:
[FooNameis:
FooBarAddis:
Bar]
这说明Spring已经完成了Bean的创建和装配工作。
1)使用@Autowired注释
Spring2.5引入了@Autowired注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作。
下面我们来看一下使用@Autowired进行成员变量自动注入的代码:
代码清单6使用@Autowired注释的Main.java,此时可以将Main.java类中的set和get方法删除
importorg.springframework.beans.factory.annotation.Autowired;
@Autowired
privateFoofoo;
privateBarbar;
Spring通过一个BeanPostProcessor对@Autowired进行解析,所以要让@Autowired起作用必须事先在Spring容器中声明AutowiredAnnotationBeanPostProcessorBean
代码清单7修改配置文件
!
--
该
BeanPostProcessor
将自动对标注
@Autowired
的
Bean
进行注入
-->
beanclass="
org.springframework.beans.factory.annotation.
AutowiredAnnotationBeanPostProcessor"
/>
—此时移除
main
的属性注入信息
当Spring容器启动时,AutowiredAnnotationBeanPostProcessor将扫描Spring容器中所有Bean,当发现Bean中拥有@Autowired注释时就找到和其匹配(默认按类型匹配)的Bean,并将其注入。
2)使用@Qualifier注释
Spring允许我们通过@Qualifier注释指定注入Bean的名称,这样就不会产生注入错误了,请看下面代码清单:
代码清单8修改Main.java类中的foo属性注释增加注释@Qualifier("
foo1"
)
@Qualifier("
代码清单9在配置文件中增加id为foo2Bean定义
Foo1"
foo2"
Foo2"
运行Test.java控制台输出如下信息:
Foo1BarAddis:
证明Spring容器成功将foo1注入进main类中
3)使用<
context:
annotation-config/>
简化配置
Spring2.1添加了一个新的context的Schema命名空间,该命名空间对注释驱动、属性文件引入、加载期织入等功能提供了便捷的配置。
我们知道注释本身是不会做任何事情的,它仅提供元数据信息。
要使元数据信息真正起作用,必须让负责处理这些元数据的处理器工作起来。
而我们前面所介绍的AutowiredAnnotationBeanPostProcessor就是处理这些注释元数据的处理器。
但是直接在Spring配置文件中定义这些Bean显得比较笨拙。
Spring为我们提供了一种方便的注册这些BeanPostProcessor的方式,这就是<
。
请看下面的代码清单:
代码清单10
代码清单中将
替换成为<
annotationconfig/>
将隐式地向Spring容器注册AutowiredAnnotationBeanPostProcessor、CommonAnnotationBeanPostProcessor、PersistenceAnnotationBeanPostProcessor以及equiredAnnotationBeanPostProcessor这4个BeanPostProcessor。
4)使用@Component
虽然我们可以通过@Autowired在Bean类中使用自动注入功能,但是Bean还是在XML文件中通过<
bean>
进行定义,也就是说,在XML配置文件中定义Bean,通过@Autowired为Bean的成员变量、方法入参或构造函数入参提供自动注入的功能。
能否也通过注释定义Bean,从XML配置文件中完全移除Bean定义的配置呢?
答案是肯定的,我们通过Spring2.5提供的@Component注释就可以达到这个目标。
代码清单11Foo.java
@Component
privateStringname="
Foo'
sname."
在类的开始位置使用@Component注释,标明此类是一个Bean
代码清单12Main.java
@Component("
privateBarbar;
……
@Component有一个可选的入参,用于指定Bean的名称,在Main中,我们就将Bean名称定义为“main”。
在使用@Component注释后,Spring容器必须启用类扫描机制以启用注释驱动Bean定义和注释驱动Bean的自动注入的策略。
Spring2.5对context命名空间进行了扩展,提供了这一功能。
代码清单13Spring配置文件中只保留以下配置信息
component-scanbase-package="
com.tony.test"
这里,所有通过<
元素定义Bean的配置内容已经被移除,仅需要添加一行<
component-scan/>
配置就解决所有问题了——SpringXML配置文件得到了极致的简化(当然配置元数据还是需要的,只不过以注释形式存在罢了)。
的base-package属性指定了需要扫描的类包,类包及其递归子包中所有的类都会被处理。
8.4.2Spring2.5基于注解驱动的MVC
Spring2.5也为SpringMVC引入了注释驱动功能。
现在我们无须让Controller继承任何接口,无需在XML配置文件中定义请求和Controller的映射关系,仅仅使用注释就可以让一个POJO具有Controller的绝大部分功能——SpringMVC框架的易用性得到了进一步的增强。
1)
基于注解的Controller
由于SpringMVC的Controller必须事先是一个Bean,所以@Controller注解是不可缺少的。
请看下面的代码清单
代码清单1
@Controller//将这个类标注为Controller
publicclassFooController{
privateFooServicefooService;
@RequestMapping("
/list.do"
)//URL请求映射
publicString[]list(){
String[]list=fooService.getAll();
System.out.println(list);
returnlist;
/del.do"
publicvoiddel(HttpServletRequestrequest,HttpServletResponseresponse){
fooService.doDel(request.getParameter("
id"
));
在代码清单1中我们通过@Controller注释将FooController.java标注为一个控制器,而不需继承或者实现任何类和接口,就使FooController.java拥有了控制器的功能。
代码清单1中使用了两个链接分别访问了不同的方法,在实际应用中我们也许有另外一种需求一个控制器只接受一个URL请求,而控制器中不同的方法来处理URL请求中携带的不同的参数,请看下面的代码清单。
2)
一个Controller对应一个URL,由请求参数决定请求处理方法
代码清单2
@Controller
@RequestMapping("
/doFoo.do"
)//指定控制器对应URL请求
//list方法对应URL/doFoo.do?
mode=list
@RequestMapping(params="
mode=list"
)
String[]list=fooService.getAll();
System.out.println(list);
returnlist;
//del方法对应URL/doFoo.do?
mode=del
mode=del"
publicvoiddel(HttpServletRequestrequest,
HttpServletResponseresponse){
代码清单2中满足了针对不同粒度程序设计的需要。
我们还可以让请求处理方法处理特定的HTTP请求如POST类型的,请看下面的代码清单。
3)
让请求处理方法处理特定的HTTP请求方法
代码清单3
//只针对POST请求
@RequestMapping(params="
mode=submit"
method=RequestMethod.POST)
publicStringsubmit(HttpServletRequestrequest,
HttpServletResponseresponse){
System.out.println("
调用submit方法."
success"
方法submit只处理类型为POST的URL请求
4)
处理方法入参绑定URL参数
代码清单4
mode=del&
id=10
publicStringdel(intid){
fooService.doDel(id);
当我们发送/doFoo.do?
id=10的URL请求时,
Spring不但让del()方法处理这个请求,而且还将id请求参数在类型转换后绑定到del()方法的id入参上。
而del()方法的返回类型是String,它将被解析为逻辑视图的名称。
也就是说Spring在如何给处理方法入参自动赋值以及如何将处理方法返回值转化为ModelAndView中的过程中存在一套潜在的规则,不熟悉这个规则就不可能很好地开发基于注解的请求处理方法,因此了解这个潜在规则无疑成为理解SpringMVC框架基于注解功能的核心问题。
代码清单4还可以写成下面这种形式
代码清单5
publicStringdel(@RequestParam("
)intid){
代码清单5中对del()请求处理方法的id入参标注了@RequestParam("
)注释,所以它将和id的URL参数绑定。
Spring的数据库支持
2008-06-3014:
19:
13
javaSpringJDBC绝缘材料 [推送到技术圈]
原创作品,允许转载,转载时请务必以超链接