1.新建Student.java
@Component
public class Student {
public void say(){
System.out.println("Student");
}
}
2.新建Person.java
@Component
public class Person {
@Resource(name="student")
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">
<!--
流程:
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.启动类扫描的注解解析器
3.启动依赖注入的注解解析器
-->
<!--
component就是bean
base-package:
会在base-package的值所在的包和子包下进行扫描所有的类
-->
<context:component-scan base-package="spring.scan"></context:component-scan>
</beans>
4.测试类
public class PersonTest extends SpringHelper{
static{
path = "spring/scan/applicationContext.xml";
}
@Test
public void test(){
Person person = (Person) context.getBean("person");
person.say();
}
}
总结:
原理:
* 启动spring容器,加载配置文件
* spring容器解析到
* spring容器会在指定的包和子包中查找类上是否有@Component
* 如果@Component没有写任何属性
@Component
public class Person(){}
==
* 如果@Component(“aa”)
@Component
public class Person(){}
==
* 在纳入spring管理的bean的范围内查找@Resource
* 执行@Resource的过程
注意:
*xml效率比较高,但是书写比较麻烦
* 注解效率比较低,书写比较简单