码迷,mamicode.com
首页 > 其他好文 > 详细

<context:component-scan base-package=""/>注解的原理

时间:2016-07-11 10:41:52      阅读:541      评论:0      收藏:0      [点我收藏+]

标签:<context:component-scan base-package=""/>注解的原理

1.定义Student类

package cn;

import org.springframework.stereotype.Component;

/**
 * Student类
 * @author Administrator
 *
 */
@Component
public class Student {
    /**
     * 定义学生说话的方法
     */
    public void say(){
        System.out.println("学生说话");
    }

}

2.定义Person类

package cn;
/**
 * Student类
 * 
 */
import javax.annotation.Resource;

import org.springframework.stereotype.Component;
@Component
public class Person {
    /**
     * @Resource是依赖注解
     *
     */
    @Resource
    private Student student;
    
    public void say(){
        this.student.say();
    }
}

3.定义配置文件

<?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-3.1.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd">
    <!-- 
        1.导入context命名空间
        xmlns:context="http://www.springframework.org/schema/context"
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-3.1.xsd"
     -->
    <!-- 2.注解配置解析器 用于依赖注入 -->
    <context:annotation-config/>
    <!-- 3.在所需要注解的地方配置@Resource -->
    <!-- 
        对bean用Annotation配置  [component就是bean]
        1.启动组件扫描的注解解析器
        <context:component-scan base-package="cn"/>
        base-package
            会在base-package="cn"会在cn包及子包下进行扫描
        2.在所需要的类上加入@Component
            相当于<bean id="student" class="cn.Student"/>
                <bean id="student" class="cn.Person"/>
     -->
    <context:component-scan base-package="cn"/>

</beans>

4.定义测试类

package cn;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
 * <context:annotation-config/>的原理
 *  1.启动Spring容器,并且加载配置文件
 *  2.创建对象
 *  3.当解析到<context:annotation-config/>的时候,会启动依赖注入的解析器
 *  4.会在纳入Spring管理的bean的范围内,看那些bean的属性上有@Resource注解
 *  5.如果@Resource注解的值为"",那么会把注解所在的属性的名称和Spring容器中bean的id进行匹配,
 *       如果匹配成功,则把id对应的对象赋值给该属性,如果匹配不成功,则按照类型进行匹配。
 *  6.如果@Resource注解的值不为"",那么会把name属性的值和Spring容器中的bean的id匹配,如果匹配成功,则赋值;如果匹配不成功,则报错    
 * @author Administrator
 * <context:component-scan base-package="cn"/>的原理
 * 1.启动Spring容器,加载配置文件
 * 2.Spring容器加载<context:component-scan base-package="cn"/>,看类上是否有@Component注解
 * 如果@Component注解上没有写任何属性
 * 示例:      
 *     @Component
 *     public class Person(){}
 *     
 *     上面的注解配置就相当于<bean id="person" class="cn.Person">    
 * 如果@Component有属性
 * 示例:      
 *     @Component("person1")
 *     public class Person(){}
 *  上面的注解配置就相当于<bean id="person1" class="cn.Person">    
 * 3.在纳入Spring管理的bean的范围内查找@Resource注解,执行@Resource注解过程  
 */
public class Test {
    public static void main(String[] args) {
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
        Person person = context.getBean("person",Person.class);
        person.say();
    }

}

显示结果

log4j:WARN No appenders could be found for logger (org.springframework.core.env.StandardEnvironment).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.
学生说话

实现原理:

* <context:component-scan base-package="cn"/>的原理
 * 1.启动Spring容器,加载配置文件
 * 2.Spring容器加载<context:component-scan base-package="cn"/>,看类上是否有@Component注解
 * 如果@Component注解上没有写任何属性
 * 示例:      
 *     @Component
 *     public class Person(){}
 *     
 *     上面的注解配置就相当于<bean id="person" class="cn.Person">    
 * 如果@Component有属性
 * 示例:      
 *     @Component("person1")
 *     public class Person(){}
 *  上面的注解配置就相当于<bean id="person1" class="cn.Person">    
 * 3.在纳入Spring管理的bean的范围内查找@Resource注解,执行@Resource注解过程 

 * <context:annotation-config/>的原理
 *  1.启动Spring容器,并且加载配置文件
 *  2.创建对象
 *  3.当解析到<context:annotation-config/>的时候,会启动依赖注入的解析器
 *  4.会在纳入Spring管理的bean的范围内,看那些bean的属性上有@Resource注解
 *  5.如果@Resource注解的值为"",那么会把注解所在的属性的名称和Spring容器中bean的id进行匹配,如果匹配成功,则把id对应的对象赋值给该属性,如果匹配不成功,则按照类型进行匹配。
 *  6.如果@Resource注解的值不为"",那么会把name属性的值和Spring容器中的bean的id匹配,如果匹配成功,则赋值;如果匹配不成功,则报错   

本文出自 “11831428” 博客,请务必保留此出处http://11841428.blog.51cto.com/11831428/1825231

<context:component-scan base-package=""/>注解的原理

标签:<context:component-scan base-package=""/>注解的原理

原文地址:http://11841428.blog.51cto.com/11831428/1825231

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!