GitHub地址:https://github.com/SirLiuGang/Spring/tree/master/spring-annotation/src/main/java/com/cn/lg/annotation
这个基本没什么代码,还是以记录和介绍使用为主
@Resource与@Autowired 属性注入
注入属性的修饰,在接口仅有单一实现类时,两个注解的修饰效果相同,可以互相替换,不影响使用。
@Resource是Java自己的注解,默认使用byName自动注入策略。
@Autowired是spring的注解,是spring2.5版本引入的,只根据type进行注入。
如果一个类有两个实现类,那么两个注解的使用方式也不同:
-- 通过name属性来指定bean
@Resource(name="catService")
public IAnimalService catService;
-- 通过Qualifier注解来指定bean
@Autowired
@Qualifier("dogService")
public IAnimalService dogService;
@Transactional 声明式事务
- 使用在类、接口、方法上边(声明到接口上可以被继承,方法上不可被继承)
- 方法需要为public
- 方法中的异常需要进行抛出
- 方法上的注解会覆盖类上边的注解
增加依赖包:
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-tx</artifactId>
<version>4.3.2.RELEASE</version>
</dependency>
</dependencies>
个人经验,开发一般这么使用:
@Transactional(rollbackFor = Exception.class)
public void save() {
}
- 在类上边添加注解。如果在类上边添加,则该类的所有方法会被事务包含,其实像一些查询之类的操作没必要包含在事务中,所以在自己需要的方法上边添加注解。
- rollbackFor = Exception.class,由于Exception是所有异常的的父类,所以不管抛出了什么异常,统一进行回滚。
- 剩下的一般采用默认设置
@Controller 、@Service、@Repository 、@Component
- @Controller
用于标注控制层,即action层 - @Service
平时使用的UserServiceImpl、UserDaoImpl都属于Service,在上边使用Service注解进行自动注册到Spring容器。不需要再在applicationContext.xml文件定义bean了。
比如下边的类:
@Service("userService")
public class UserServceImpl {
}
其作用就相当于applicationContext.xml文件里面的:
<bean id="courseDAO" class="com.hzhi.course.dao.CourseDAOImpl"/>
一般Service中可以定义当前bean的名字,这样在使用@Resource注解时可以指定注入的beanName,如上边的@Resource(name=“userService”)
-
@Repository
-
@Component