• 按照类型进行匹配

    • @Autowired

  • 按照ID进行匹配

(spring中注解)@Autowired + @Qualifier("student") == (j2ee中注解)@Resource(name = "student")


注解DI流程

     *  1、启动spring容器
     * 2、把spring配置文件中的bean实例化(person,student)
     * 3、当spring容器解析配置文件
     *     <context:annotation-config></context:annotation-config>
     *    spring容器会在纳入spring管理的bean的范围内查找哪些类的属性上是否加有@Resource注解
     * 4、如果在属性上找到@Resource注解
     *      如果@Resource的注解的name属性的值为""
     *           则把@Resource所在的属性的名称和spring容器中的id作匹配
     *                  如果匹配成功,则赋值(将bean中的创建类的对象赋值给@Resource所在的属性,完成依赖注入)
     *                  如果匹配不成功,则会按照类型进行匹配
     *                      如果匹配成功,则赋值,匹配不成功,报错
     *      如果@Resource的注解的name属性的值不为""
     *           则解析@Resource注解name属性的值,把值和spring容器中的ID进行匹配
     *               如果匹配成功,则赋值
     *               如果匹配不成功,则报错
     *               
     * 说明:
     *     注解代码越来越简单,效率越来越低
     *     注解只能应用于引用类型

类扫描(好处:配置文件中行数变少了)

    <!-- 
            component
              把一个类放入到spring容器中,该类也称为component
              base-package 在指定的包及子包中扫描
     -->
<context:component-scan 
    base-package="com.itheima11.spring.scan.annotation"></context:component-scan>
                      
        
/**
 * @Component("ss")
 * ==
 * <bean id="ss" class="..Student">
 * 
 * @Component
 * ==
 * <bean id="student" class="..Student">
 *
 */
@Component("student")
public class Student {
    public void say(){
        System.out.println("student");
    }
}

类扫描流程

/**
 * 1、启动spring容器
 * 2、当spring容器解析到
 *         <context:component-scan 
                base-package="com.itheima11.spring.scan.annotation">
                </context:component-scan>
       会去base-package指定的包及子包中扫描所有的类
   3、看哪些类上面是否加有@Component注解
            如果该类上面有@Component注解
               检查该注解的value属性是否为""
                   如果为"",则会把该注解所在的类的类名以这样的方式
                   @Component
                   public class Person{
                   
                   }
                   ==
                   <bean id="person" class="..Person">
                  如果不为"",则以这样的形式:
                   @Component("aa")
                   public class Person{
                   
                   }
                   ==
                   <bean id="aa" class="..Person">
    4、扫描spring容器中所有的bean,进行@Resource规则
 */

更多典型化注解

  • @Controller @Service @ Repository 与@Component用法一样、


spring容器中xml的继承(parent)

<bean id="student" class="..Person" parent="person"></bean>

注解继承则不需要任何改动


SportCloud
157 声望9 粉丝

数据仓库