1.什么是基于Java的Spring注解配置? 给一些注解的例子

基于Java的Spring注解配置就是一个注解实现xml配置的过程。在Spring中xml配置方式很繁琐,注解方式可以很大程度上简化那些操作。

  • @Configuration 注解为例,它用来标记类可以当做一个bean的定义,被 Spring IOC容器使用。
  • @Bean注解,它表示此方法将要返回一个对象,作为一个bean注册进Spring应用上下文。

    1. @Configuration
    2. public class StudentConfig{
    3. @Bean
    4. public StudentBean myStudent() {
    5. return new StudentBean();
    6. }
    7. }

    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。
    1. public class Employee{
    2. private String name;
    3. @Required
    4. public void setName(String name){
    5. this.name=name;
    6. }
    7. public string getName(){
    8. return name;
    9. }
    10. }

    4.@Autowired 注解有什么作用

    @Autowired默认是按照类型装配注入的,默认情况下它要求依赖对象必须存在 (可以设置它required属性为false)。
    @Autowired 注解提供了更细粒度的控制,包括在何处以及如何完成自动装配。它的用法和@Required一样,修饰setter方法、构造器、属性或者具有任意名称和/或多个参数的PN方法。
    1. public class Employee{
    2. private String name;
    3. @Autowired
    4. public void setName(String name){
    5. this.name=name;
    6. }
    7. public string getName(){
    8. return name;
    9. }
    10. }

    5.@Autowired和@Resource之间的区别

  1. @Autowired与@Resource都可以用来装配bean. 都可以写在字段上,或写在setter方法上。
  2. @Autowired默认按类型装配(这个注解是属业spring的),默认情况下必须要求依赖对象必须存在,如果要允许null值,可以设置它的required属性为false,如:@Autowired(required=false) ,如果我们想使用名称装配可以结合@Qualifier注解进行使用,如下:

    1. @Autowired()@Qualifier("baseDao")
    2. private BaseDao baseDao;
  3. @Resource(这个注解属于J2EE的),默认按照名称进行装配,名称可以通过name属性进行指定,如果没有指定name属性,当注解写在字段上时,默认取字段名进行安装名称查找,如果注解写在setter方法上默认取属性名进行装配。当找不到与名称匹配的bean时才按照类型进行装配。但是需要注意的是,如果name属性一旦指定,就只会按照名称进行装配。

    1. @Resource (name= "baseDao" )
    2. private BaseDao baseDao;

    推荐使用:@Resource注解在字段上,这样就不用写setter方法了,并且这个注解是属于J2EE的,减少了与spring的耦合。这样代码看起就比较优雅。

    6.@Qualifier 注解有什么作用

    当您创建多个相同类型的 bean 并希望仅使用属性装配其中一个 bean 时,您可 以使用@Qualifier 注解和 @Autowired 通过指定应该装配哪个确切的 bean 来 消除歧义。

    7.@RequestMapping 注解有什么用?

    @RequestMapping 注解一般用于Controller层,将特定的HTTP请求方法映射到处理相应请求的控制器特定类或者方法中。

此注释可应用于两个级别:

  • 类级别:映射请求的 URL

    1. @RequestMapping("/user")
  • 方法级别:映射 URL 以及 HTTP 请求方法

    1. @RequestMapping(value="/user",method=RequestMethod.GET)