Spring中的注解式开发
1.为什么要用注解式开发?
在原始的开发方式中,对象的实例化都是spring工厂加载配置文件所创建的。随着业务的增多,显得配置文件过于臃肿。使用注解的方式,大大提高了开发的效率。
2.创建对象的注解
@Component 修饰范围:只能用在类上。作用:用来对当前修饰的类进行实例化。默认创建对象在工厂中实例化为:类名的首字母小写。
Value属性:用来指定当前创建的实例所在工厂中的唯一标识。
@Repository 专用于DAO组件对象的实例化(一般spring工厂在启动的时候就把dao对象都创建了。通过扫描的方式)
@Service 专用于Service组件对象的实例化
@Controller 专用于Action组件的实例化
@Scope 修饰范围:只能用在类上 作用:用来控制当前组件对象在工厂中的创建次数。默认是单例。
Value属性:singleton单例 prototype多例
3.注入相关的注解
@Autowired(spring框架提供的) 修饰范围:用在属性上或属性的set方法上。作用:用来给属性注入值的(用来依赖注入的)。默认根据类型进行注入。(大多数情况下根据@Autowired注入属性就行)
修改注入方式:指定bean的名称注入,要配合@Qualified使用。
@Qualified修饰范围:同Autowired。
作用: 用来指定@Autowired注解根据名称指定。(什么情况下用@Qualified:一般同一个Dao有多个实现类的时候,使用名称注入)
@Resource(JAEE提供的)
默认先根据成员变量的名称注入,当名称不一致在根据类型注入。
注意:spring为了进一步简化开发,在使用注解式开发时,成员变量不需要再提供set方法。
@Transactional(事务注解)修饰范围:可以用在类上,也可以用在类的方法上。
作用:用来对当前类中的方法加入事务控制的。
用在类上时:代表类中的所有方法都加入事务控制。
用在方法上:只有加事务注解的方法才有事务控制。
总结:当类和方法上同时存在事务注解时,以局部优先。
Propagation属性:用来控制事务的传播属性
Isolation属性:用来控制事务的隔离级别。
Readonly属性:事务的读写性。
Timeout属性:事务的超时性
注意:默认加入事务注解不会生效,因为没有指定事务管理器。使用事务生效,必须在配置文件中加入如下配置:
<!-- 配置事务管理器 --> <bean id="transactionManager"class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <!-- 依赖数据源对象 --> <property name="dataSource" ref="dataSource"/> </bean> <!-- 事务生效,要开启事务注解驱动(学习了注解式开发后,就代替了之前手动配置的事务属性和组装切面的代码) --> <tx:annotation-driven transaction-manager="transactionManager"/>