今天看一篇技术博客,看到注解@transactional,一时想不起来是什么意思以及用法,记得之前百度过,但是用得少,记得不深。所以搜集了一些资料,决定写一篇关于Spring常用注解的博,再巩固相关知识。
一、Spring配置:注解配置和XML配置
注解配置:使用注解向Spring容器注册Bean。准备工作:在applicationContext.xml中进行注册,并指明Bean所在的包:
<context:component-scan base-package="com.spms"/>
以上配置表名,包com.spms及其子包中,如果某个类头上带有特定的注解@Component/@Controller/@Service/@Repository,就会将这个动作作为Bean注册进Spring容器。
二、Spring常用注解
1、@Component
所有受Spring管理的组件的通用形式,当不明确当前的类属于哪一层、该用什么组件的时候,可以用@Component组件代替。这个组件用的较少。
2、@Controller
对应表现层的Bean,也就是Action。使用@Controller标注一个类之后,就把该类交给Spring容器管理,在Spring容器中会存在一个以该类的名字(首字母改为小写)命名的action,若指定该action的名字@Controller(value="aa")或者@Controller("aa"),则用aa命名。一般与@Scope一起使用:
@Controller
@Scope("prototype")
表示将Action的范围声明为原型,保证每一个请求有一个单独的Action来处理,避免了线程安全问题。Spring默认是单例模式,即"singleton",这样只会创建一个Action对象,每次访问的都是同一个Action对象,数据不安全。
3、@Service
对应的是业务层Bean。
// 注入userService
@Resource(name = "userService")
private UserService userService;
Spring根据@Resource以及其指明的name去将相应的实例注入到这个Action中,帮助其实例化。这里将new一个实例的权限交给Spring,而自己不用管,控制权的转移,即“控制反转”,又称为依赖注入。
4、@Repository
对应数据访问层Bean。用法与@Service类似。
5、@RequestMapping
是一个用来处理请求地址映射的注解,可用于类或方法上。有六个属性:
(1)value:用法如下图所示,用value的值作为访问该类的路径;
@Controller
@RequestMapping(value = "/bulletin")
public class BulletinController {......}
(2)method:有POST,GET等;
(3)consumes:指定请求的类型,如application/json, text/html;
(4)produce ; (5)params:指定request中必须包含某些参数值时,才让该方法处理;(6)headers;
6、@RequestParam
把请求参数传递给请求方法,
@RequestMapping(value = "/findByID")
public ModelAndView bulletin(@RequestParam(value = "bulID" ) Integer bulID,HttpServl etRequest request){......}
上述代码表示,将jsp页面中的值为“bulID”的变量传到bulletin方法中,并赋值给变量bulID。
@RequestParam(value="xx",required=false)此时表名这个参数不是必须要的。当没有设置required为false,而jsp中有没有提供这个参数时,会报错。
7、@Transactional
先了解什么是事务管理:
(1)对于一系列数据库操作进行管理。
(2)一个事务包含一个或多个SQL语句,是逻辑管理的工作单元(原子单元)。
(3)一个事务开始于第一次执行的SQL语句,结束于Commit 或Rollback或DDL语句。
Spring Framework对事务管理提供了一致的抽象,其特点如下:
- 为不同的事务API提供一致的编程模型,比如JTA(Java Transaction API), JDBC, Hibernate, JPA(Java Persistence API和JDO(Java Data Objects)
- 支持声明式事务管理,特别是基于注解的声明式事务管理,简单易用
- 提供比其他事务API如JTA更简单的编程式事务管理API
- 与spring数据访问抽象的完美集成
Spring支持编程式事务管理和声明式事务管理。其中,声明式事务管理只需在配置文件中做相关的事务规则说明,
过通过@Transactional注解的方式,便可以将事务规则应用到业务逻辑中。
通过使用@Transactional,事务传播等很多重要任务可以自动处理。
目前就写这么多,如果碰到其它常见注解,再加上来。。。