1.新建Student.java
public class Student {
public void say(){
System.out.println("Student");
}
}
2.新建Person.java
public class Person {
@Resource(name="student")
// @Autowired //按照类型进行匹配
// @Qualifier("student")//id
private Student student;
private Long pid;
public void say(){
this.student.say();
}
@PostConstruct
public void init(){
System.out.println("init");
}
@PreDestroy
public void destroy(){
System.out.println("destroy");
}
}
3.配置xml文件
<?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">
<context:annotation-config></context:annotation-config>
<bean id="student" class="spring.di.annotation.Student"></bean>
<bean id="person" class="spring.di.annotation.Person"></bean>
</beans>
4.新建测试类
public class PersonTest extends SpringHelper{
static{
path = "spring/di/annotation/applicationContext.xml";
}
@Test
public void test(){
ClassPathXmlApplicationContext applicationContext = (ClassPathXmlApplicationContext) context;
Person person = (Person) applicationContext.getBean("person");
person.say();
applicationContext.close();
}
}
xml配置文件书写总结:
1.导入命名空间
xmlns:context="http://www.springframework.org/schema/context"
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-2.5.xsd
2.导入依赖注入的注解解析器
<context:annotation-config></context:annotation-config>
3.把student和person导入进来
总结流程:
原理:
* 启动spring容器,并且加载配置文件
* 会为student和person两个类创建对象
* 当解析到时,会启动依赖注入的注解解析器
* 会在纳入spring管理的bean的范围内查找看哪些bean的属性上右@Resourse注解
* 如果@Resourse注解的name属性值为空,则会把注解所在的属性的名称和spring容器中bean的id进行匹配
* 如果匹配成功,则把id对应的对象赋值给该属性,如果匹配不成功,则按照类型进行匹配;如果再匹配不成功,则报错
* 如果@Resourse注解的name属性值不为空,会把name属性的值和spring容器中bean的id进行匹配,如果匹配成功,
* 则赋值,否则报错
注意:注解只能用于引用类型