Spring的@Resource注解及原理

来源:互联网 发布:三杰麻将机编程 编辑:程序博客网 时间:2024/05/05 02:58
package cn.xhx.spring.di.annotation.test;import org.junit.Test;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;import cn.xhx.spring.di.annotation.Person;public class AnnotationTest {/** * 原理 * 1、当启动spring容器时,创建两个对象(student,person) * 2、当spring容器解析到 * <context:annotation-config></context:annotation-config> *    spring容器会在spring容器管理的bean的范围内查找这些类的属性上面是否加了@Resource注解 * 3、spring解析@Resource注解的name属性 * 如果name属性为"" * 说明该注解根本没有写name属性 * spring容器会得到该注解所在的属性的名称和spring容器中的id相匹配,如果匹配成功,则赋值 *    如果匹配不成功,则按照类型进行匹配 *   还不成功,报错! * 如果name属性不为"" * 则按照name属性的值和spring容器中的id做匹配,如果匹配成功,则赋值,不成功,则报错! *说明: *注解只能作用于引用类型 *注解写法比较简单,但是效率比较低 *xml写法比较复杂,但是效率比较高 */@Testpublic void AnnotationTest () {ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");Person person = (Person)applicationContext.getBean("person");person.getStudent().say();//输出"student say"}}
package cn.xhx.spring.di.annotation;import java.util.List;import java.util.Map;import java.util.Properties;import java.util.Set;import javax.annotation.Resource;public class Person {private String name;@Resource(name="student")/** * @Autowired  //按照类型进行匹配 * @Qualifier("student") //按照id进行匹配 * @Resource是java扩展包下的,spring为了不使用java的注解,编写了@Autowired和@Qualifier,其2个的作用相加等于@Resource */private Student student;public String getName() {return name;}public void setName(String name) {this.name = name;}public Student getStudent() {return student;}
}
package cn.xhx.spring.di.annotation;public class Student{public void say() {System.out.println("student say");}}

<?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:context="http://www.springframework.org/schema/context"       xsi:schemaLocation="http://www.springframework.org/schema/beans            http://www.springframework.org/schema/beans/spring-beans-2.5.xsd           http://www.springframework.org/schema/context           http://www.springframework.org/schema/context/spring-context-2.5.xsd"><bean id="student" class="cn.xhx.spring.di.annotation.Student"></bean><bean id="person" class="cn.xhx.spring.di.annotation.Person"></bean><context:annotation-config></context:annotation-config></beans>


0 0