[刘阳Java]_Spring常用注解介绍_第6讲

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

1. Spring常用注解如下

  • @Component
  • @Autowired
  • @Qualifier
  • @Scope
  • @Controller
  • @Service
  • @Repository

2. 使用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包在使用<context:component-scan/>需要导入此包】

3. @Component注解

  • @Component主要用于将一个Java类注入到Spring框架中,它相当于XML配置文件中的<bean id=”xxx” class=”xxx”/>
  • 当使用了Spring注解后,我们需要在配置文件中添加<context:component-scan/>来扫描添加了注解的类,这样子声明注解的类才能起作用
  • Bean实例的名称默认是Bean类的首字母小写,其他部分不变。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd">

    <context:component-scan base-package="com.gxa.spring.day02"></context:component-scan>
    
</beans>
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());
    }
    
}

 4. 除了@Component注解,Spring容器提供了3个功能和@Component注解等同。它们分别是用于对Dao,Service及Web层的Controller进行注解

  • @Repository:用于对Dao实现类注解
  • @Service:用于对Service实现类注解
  • @Controller:用于对Controller实现类注解

5. @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配置文件中<property/>
     */
    @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();
    }
}

 6. @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
    
}

7. @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());
    }
}

8. @Scope注解来显式指定Bean作用范围

@Scope("prototype")
@Component
public class Car {
}
原文地址:https://www.cnblogs.com/liuyangjava/p/6671172.html