1.什么是基于Java的Spring注解配置? 给一些注解的例子
基于Java的Spring注解配置就是一个注解实现xml配置的过程。在Spring中xml配置方式很繁琐,注解方式可以很大程度上简化那些操作。
- @Configuration 注解为例,它用来标记类可以当做一个bean的定义,被 Spring IOC容器使用。
@Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。
@Configurationpublic class StudentConfig{@Beanpublic StudentBean myStudent() {return new StudentBean();}}
2.@Component、@Controller、@Repository、@Service 有何区别?
这四个注解都是将当前对象注入Spring容器当中统一进行管理。但是他们的使用场景不同。
@Component:将这个类标记为bean,他是一个通用构造型。当不确定当前的类是业务分层当中属于哪一层时候,可以使用这个注解,Spring会将这个bean拉入应用程序环境。
- @Controller:将一个类标记为 Spring Web MVC 控制器。标有它的 Bean 会自动导入到 IoC 容器中。一般是controller层使用的注解。
- @Service:这个注解在服务层或者业务层进行使用,不使用@Component的原因是他有更好的方式指定了意图。
- @Repository:这个注解一般用于DAO层,将DAO层的类倒入IoC容器,并使未经检查的异常异常有资格转换为Spring DataAccessException。
3.@Required 注解有什么作用
这个注解表明bean的属性必须在配置的时候设置,通过一个bean定义的显式的属性值或通过自动装配,若@Required注解的bean属性未被设置,容器将抛出BeanInitializationException。public class Employee{private String name;@Requiredpublic void setName(String name){this.name=name;}public string getName(){return name;}}
4.@Autowired 注解有什么作用
@Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在 (可以设置它required属性为false)。
@Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。public class Employee{private String name;@Autowiredpublic void setName(String name){this.name=name;}public string getName(){return name;}}
5.@Autowired和@Resource之间的区别
- @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
@Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:
@Autowired()@Qualifier("baseDao")private BaseDao baseDao;
@Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。
@Resource (name= "baseDao" )private BaseDao baseDao;
推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。
6.@Qualifier 注解有什么作用
当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可 以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来 消除歧义。
7.@RequestMapping 注解有什么用?
@RequestMapping 注解一般用于Controller层,将特定的HTTP请求方法映射到处理相应请求的控制器特定类或者方法中。
此注释可应用于两个级别:
类级别:映射请求的 URL
@RequestMapping("/user")
方法级别:映射 URL 以及 HTTP 请求方法
@RequestMapping(value="/user",method=RequestMethod.GET)
