您的位置:首页 > 编程语言 > Java开发

Spring的@Resource注解及原理

2016-03-27 22:41 549 查看
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写法比较复杂,但是效率比较高
*/

@Test
public 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>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: