• [刘阳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 {
    }
  • 相关阅读:
    3.2 机器学习基本算法
    《TensorFlow深度学习应用实践》
    基于element动态调整table高度
    关于小程序表单验证解决方案
    LHS与RHS
    小程序---获取地理位置及获取用户userinfo信息
    element----修改element中table里面的右侧滚动条样式
    关于微信里wx.getUserInfo获取用户信息都是拼音的转成中文方法
    element中upload单图片转base64后添加进数组,请求接口
    vue的生命周期
  • 原文地址:https://www.cnblogs.com/liuyangjava/p/6671172.html
Copyright © 2020-2023  润新知