【Spring】Spring注解式开发

引言-为什么需要注解式开发?

        随着项目变得复杂,需要编写的业务组件增多:例如UserService、EmpService,...xxxService, UserAction、EmpAction...xxxAction。每写一个业务层,就需要在Spring.xml中通过bean标签使用 id 注册,这样很麻烦。并且要是忘记注册业务层,就会出现空指针异常。因此Spring为了让开发者更专注于开发,提高效率,因此提出办法:不需要在工厂中配置,就能完成对象的创建、注入,这种方法就是注解式开发。

一、注解(Annotation)式开发

定义:通过Spring框架提供的一系列相关注解 完成项目的快速开发

注解:Annotation 是 java中一种特殊的类, 类似于 Interface使用时:@注解类名(属性=参数)例如:@Param

1.1开启注解扫描配置

前置条件:必须在工厂配置文件中完成注解扫描

(需要让Spring工厂知道你在哪些类上加了注解!)

<!--开启注解扫描-->
<context:component-scan base-package="com.xxx.xxx"/>

 1.2实例化相关注解 

Spring 自2.5版本以后,提供了一些注解用来在使用spring时进行快速开发

 创建对象的相关注解有:

@Component 注解

作用:(通用的创建实例的注解) 用来负责对象的创建                  相当于  <bean id=" " class = " ">

修饰范围:只能用在类上

注意:默认使用这个注解 在工厂中创建的对象的唯一标识为 类名首字母小写  例如在类名UserDAoImpl 上加了该注解, 那么 创建出来的对象的默认id 为 userDAOImpl

value属性作用: 用来指定创建的对象 在工厂中的唯一标识

默认ID 也可以指定,因为在@Component注解中存在一个value属性,可指定创建对象的名字。如果value属性存在,最好是以接口的首字母小写来命名 

@Component("userDAO")  等价于 @Component(value="userDAO")

 @Component是通用的注解,为了让开发者更清晰地知道当前注解创建的是什么对象,因此有了下面三个注解,其作用一样都能创建对象。

@Repository

作用:一般用来创建DAO中组件的注解

@Service:

作用:一般用来创建Service中组件的注解

@Controller:

作用:一般用来创建 Controller 中组件的注解

总结:

这三个注解与@Component 都可以创建对象,但这三个注解还有其他的含义,@Service创建业务层对象,业务层对象可以加入事务功能,@Controller 注解创建的对象可以作为处理器接收用户的请求。

@Repository,@Service,@Controller 是对@Component 注解的细化,标注不同层的对象。即持久层对象,业务层对象,控制层对象。
 

 1.3控制对象的创建次数的注解

工厂中创建对象默认是单例,

a.通过在配置文件中修改 <bean id = "" class ="" scope = "singleton  |   prototype">

b.注解中控制创建次数

@Scope :

作用: 用来指定对象的创建次数,默认单例

修饰范围:只能加在类上

value属性:singleton (单例)|   prototype(多例)

注意:在管理struts的action时必须加入@Scope注解,值必须为prototype

1.4属性注入的相关注解

a.Spring框架提供的    

@Autowired                (推荐使用

作用:用于给类中成员变量赋值。当在成员变量上标注了此注解,就会自动在工厂中去找有无创建好的这个类对象

修饰范围:可以加在成员变量上,也可以加成员变量大的 GET / SET 方法上

注意:默认根据类型进行注入

b.javaEE中自带的

@Resource

作用:完成成员变量的赋值(注入)操作

修饰范围:用在类中的 成员变量 或者 类中成员变量的  GET / SET 方法上

注意:默认根据名称注入,名称找不到时自动根据类型注入

注意:使用注解进行注入时, 那么以后注入的成员变量 可以不用再提供 SET 方法 

1.5控制事务的相关注解

@Transactional

注解作用:用来给类中方法加入事务,简化配置文件中两段配置:1)事务通知及事务细粒度配置 2)简化事务切面配置。

修饰范围:用在类上,主要用在业务层组件类上或者是方法上

                类 和 方法上 同时存在该注解时   局部优先原则

  •  加在 类上 代表类中所有方法加入事务控制
  •  加在 方法上 代表当前方法加入事务控制
  •  类和方法上都有, 那么方法优先

使用要求:要想让 @Transactional 这个注解生效,应该在配置文件中加入如下配置:

<!--开启注解式事务,才能生效-->

<tx:annotation-driven transaction-manager="transactionManager"/>

注解属性:

        propagation        用来控制事务传播级别

        Isolation              用来控制隔离级别

        timeout                用来设置超时性

        rollback-for        用来设置什么异常回滚

        norollback-for        用来设置什么异常 不回滚

        readonly                用于设置事务读写性
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值