Spring MVC基础

Spring2.5版本发布后,由于支持注解配置,易用性大幅提升

Spring3.0版本更加完善,实现对struts2的超越

【Struts2缺点:采用了值栈,OGNL表达式,struts2标签库,导致应用性能下降

   Struts2优点:多层拦截器,多实例action性能都很好】


Spring3:

先从实体开始:实体的写法:现在都用标注:需要oORM框架,依然使用hibernate

所以需要引入jar包:hibernate-jpa-2.0.api.xxx.jar





SessionFactory 用到hibernate-core-4.1.8.Final.jar




首先,使用 @Repository 将 DAO 类声明为 Bean 【】


其次,在 XML 配置文件中启动 Spring 的自动扫描功能
<context:component-scan base-package=”bookstore.dao” />
所有标注了 @Repository 的类都将被注册为 Spring Bean。 

为什么 @Repository 只能标注在 DAO 类上呢?

因为该注解的作用

1.不只是将类识别为Bean,同时它还能

2.将所标注的类中抛出的数据访问异常封装为 Spring 的数据访问异常类型。 

Spring本身提供了一个丰富的并且是与具体的数据访问技术无关的数据访问异常结构,

用于封装不同的持久层框架抛出的异常,使得异常独立于底层的框架。

Spring 2.5 在 @Repository的基础上增加了功能类似的额外三个注解:


@Component、@Service、@Constroller,它们分别用于软件系统的不同层次:

  • @Component 是一个泛化的概念,仅仅表示一个组件 (Bean) ,可以作用在任何层次。
  • @Service 通常作用在业务层,但是目前该功能与 @Component 相同。
  • @Constroller 通常作用在控制层,但是目前该功能与 @Component 相同。
通过在类上使用 @Repository、@Component、@Service 和 @Constroller 注解,

1.Spring会自动创建相应的 BeanDefinition 对象

2.注册到 ApplicationContext 中。这些类就成了 Spring受管组件

当一个Bean被自动检测到时,会根据那个扫描器的BeanNameGenerator策略生成它的bean名称

默认的BeanNameGenerator策略是:

情况一:如果包含name属性:把name取值作为Bean的名字

情况二:如果不包含name属性或者其他被自定义过滤器发现的组件:默认Bean名称为:小写字母开头的非限定类名。

情况三:自定义命名策略。具体实现BeanNameGenerator接口,确认包含一个默认的无参构造方法,然后在配置扫描器时提供一个全限定类名,

 <beans ...> 
 <context:component-scan 
    base-package="a.b" name-generator="a.SimpleNameGenerator"/> 
 </beans> 
与通过 XML 配置的 Spring Bean 一样,通过上述注解标识的Bean,其默认作用域是"singleton",
为了配合这四个注解,在标注 Bean 的同时能够指定 Bean 的作用域,Spring2.5 引入了
 @Scope 注解。使用该注解时只需提供作用域的名称就行了,如下所示:

 @Scope("prototype") 
 @Repository 
 public class Demo { … } 

如果你想提供一个自定义的作用域解析策略而不使用基于注解的方法,只需

实现 ScopeMetadataResolver接口确认包含一个默认的没有参数的构造方法。然后在配置扫描器时提供全限定类名:

 <context:component-scan base-package="a.b"   scope-resolver="footmark.SimpleScopeResolver" /> 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值