zoukankan      html  css  js  c++  java
  • [刘阳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 {
    }
  • 相关阅读:
    8.10
    今日头条笔试题 1~n的每个数,按字典序排完序后,第m个数是什么?
    Gym 100500B Conference Room(最小表示法,哈希)
    CodeForces 438D The Child and Sequence(线段树)
    UVALIVE 6905 Two Yachts(最小费用最大流)
    Gym Conference Room (最小表示法,哈希)
    hdu 2389 Rain on your Parade(二分图HK算法)
    Codeforces Fox And Dinner(最大流)
    zoj 3367 Counterfeit Money(dp)
    ZOJ3370. Radio Waves(2-sat)
  • 原文地址:https://www.cnblogs.com/liuyangjava/p/6671172.html
Copyright © 2011-2022 走看看