===========@Autowired与@Resource比较===========
今天在spring注入的时候用到了
@Autowired@Qualifier("userServiceImp")private UserService userService;
后面我的导师提出了为什么不用@Resource替换上面的代码进行装配呢?
好,那么问题就来了:
为什么一定要用@Resource呢?@Resource有什么好呢?
现在我们比较下两者的区别,在做定论。
相同点:
@Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
不同点:
@Autowired:
@Autowired默认按类型装配(这个注解是专属spring的),默认情况下必须要求依赖对象必须存在,
如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,
如果我们想使用名称装配可以结合@Qualifier注解进行使用,如前面所提到的:
@Autowired@Qualifier("userServiceImp")private UserService userService;
@Resource
@Resource(这个注解属于J2EE的),默认安装名称进行装配,名称可以通过name属性进行指定,
如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,
如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。
如果name属性一旦指定,就只会按照名称进行装配。如下:
@Resource(name = "userServiceImp")private UserService userService;
最后我们推荐使用@Resource:
@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。
===========Exception、RuntimeException、Error===========
异常分为两种:一种是运行时异常(看RuntimeException单词即可知道其意思),另一种是受检查时异常(Exception)
RuntimeException:java编译器不去检查,即便是出现这种异常,在编译时也不会抛出。如:1/0这种情况;运行时异常是可以通过try……catch捕获的,捕获后亦可进行相应的处理操作。
Exception:受检查异常如果没有try……catch也没有throws抛出,编译是通不过的
Error:运行时错误,通常是由Java虚拟机抛出的,如OutOfMemoryError,其和运行时异常的相同之处是:Java编译器不去检查他们,当程序运行时出现它们都会终止运行。