标签:<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