第6讲_Spring常用注解介绍

Spring的注解是在Spring2.5的版本中引入的,目的简化XML配置。在企业开发过程中使用注解的频率非常高,但是学习注解的前提是大家一定要对Spring基于XML配置要熟悉,这是我个人建议,因为在Spring2.0的版本时候是没有出现注解的使用。

  1. Spring常用注解如下
  • @Component
  • @Autowired
  • @Qualifier
  • @Scope
  • @Controller
  • @Service
  • @Repository
  1. 使用Spring注解的时候一定关注Spring框架需要加入的包【很重要】,我们这里以spring4.0.3版本为例来介绍
  • common-logging.jar
  • spring-core-4.0.3.jar
  • spring-context-4.0.3.jar
  • spring-beans-4.0.3.jar
  • spring-expression-4.0.3.jar
  • spring-aop-4.0.3.jar,【此jar包在使用需要导入此包】
  1. @Component注解
  • @Component主要用于将一个Java类注入到Spring框架中,它相当于XML配置文件中的
  • 当使用了Spring注解后,我们需要在配置文件中添加来扫描添加了注解的类,这样子声明注解的类才能起作用
  • Bean实例的名称默认是Bean类的首字母小写,其他部分不变。


    

package com.gxa.spring.day02;
import org.springframework.stereotype.Component;
@Component
public class StudentAnnotation {
}
package com.gxa.spring.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.gxa.spring.day02.StudentAnnotation;
public class Test02 {
    @Test
    public void m06() {
        ApplicationContext context = new ClassPathXmlApplicationContext("spring.xml");
        StudentAnnotation studentAnnotation = context.getBean("studentAnnotation", StudentAnnotation.class);
        System.out.println(studentAnnotation.hashCode());
    }
}
  1. 除了@Component注解,Spring容器提供了3个功能和@Component注解等同。它们分别是用于对Dao,Service及Web层的Controller进行注解
  • @Repository:用于对Dao实现类注解
  • @Service:用于对Service实现类注解
  • @Controller:用于对Controller实现类注解
  1. @Autowired注解
  • Spring2.5引入了@Autowired注释,它可以对类成员变量、方法及构造函数进行标注,完成自动装配的工作(DI依赖注入工作)
  • Spring通过@Autowired注解实现Bean之间的依赖关系
package com.gxa.spring.day02;

import org.springframework.stereotype.Component;

@Component
public class TeacherAnnotation {
    public void getTeacherName() {
        System.out.println("===吴老师好===");
    }
}
package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class StudentAnnotation {
    
    /**
     * 通过Autowired来自动装备Student所依赖的对象
     * 无需创建setter方法
     * 无需编写XML配置文件中
     */
    @Autowired
    private TeacherAnnotation teacherAnnotation;
    
    public void showTeacher() {
        teacherAnnotation.getTeacherName();
    }
}
  • @Autowired(required = false),告诉 Spring:在找不到匹配 Bean 时也不报错
package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class StudentAnnotation {
    
    /**
     * 注意TeamAnnotation没有加入@Component
     * 当StudentAnnotation依赖TeamAnnotation会报错
     * 但是如果加入@Autowired(required=false)就不会报错
     */
    @Autowired(required=false)
    private TeamAnnotation teamAnnotation; 
    
    public void showTeacher() {
        teacherAnnotation.getTeacherName();
    }
}
  1. @Qualifier指定注入Bean的名称
  • 如果容器中有一个以上匹配的Bean时,则可以通过@Qualifier注解限定注入的Bean名称
package com.gxaedu.bean;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class Computer {
    @Autowired
    @Qualifier("storage01")
    private Storage storage;
    public void m01() {
        storage.show();
    }
}
package com.gxaedu.bean;

import org.springframework.stereotype.Component;

@Component("storage01")
public class Storage { //此类是在com.gxaedu.bean下的Storage
    public void show() {
        System.out.println("东芝硬盘");
    }
}
package com.gxaedu.test;

import org.springframework.stereotype.Component;

@Component
public class Storage { //此类是在com.gxaedu.test下的Storage
    
}
  1. @Qualifier为方法指定注入Bean名称
package com.gxa.spring.day02;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Component;

@Component
public class StudentAnnotation {
    
    private CourseAnnotation courseAnnotation;
    
    /**
     * @Autowired来自动装备构造方法里面的对象
     * @Qualifier来指定依赖对象的bean
     * @paramcourseAnnotation
     */
    @Autowired
    public StudentAnnotation(@Qualifier("course") CourseAnnotation courseAnnotation) {
        this.courseAnnotation = courseAnnotation;
    }
    
    public void showCourse() {
        System.out.println(courseAnnotation.hashCode());
    }
}
  1. @Scope注解来显式指定Bean作用范围
@Scope("prototype")
@Component
public class Car {
}

你可能感兴趣的:(第6讲_Spring常用注解介绍)