在spring的底层中,重要特性是IoC和DI,即是控制反转和依赖注入。
spring认为所有组件都应该放在IoC容器中,然后组件之中的关系通过容器自动装配,也就是我们所说的依赖注入。
这篇文章主要介绍容器的组件注册管理。
以前通常是用配置文件来注册组件。例如
在bean配置文件使用bean标签。
beans.xml
<bean id="person" class="com.xxx.bean.Person" >
<property name="age" value="18"></property>//属性赋值
<property name="name" value="zhangsan"></property>
</bean>
测试类
MainTest.java
public class MainTest {
public static void main(String[] args) {
//类路径下的xml配置文件,然后返回IoC容器
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Person bean = (Person) applicationContext.getBean("person");
System.out.println(bean);
}
}
这是过去我们常用的注册组件方式。
如果采用注解式开发,就需要把配置文件转换成配置类,其实配置类是等同于配置文件的,只是一个是java代码的方式,一个是xml配置的方式。
MainConfig.java
//配置类==配置文件
@Configuration //告诉Spring这是一个配置类
public class MainConfig {
//给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id
//@Bean跟Bean标签是一模一样的
@Bean("person")//指定名字叫person,不允许通过方法名修改名字,这样在容器中就是person组件,而不是person01
public Person person01(){
return new Person("lisi", 20);//返回一个person对象
}
}
相应的测试类也要修改为
MainTest.java
public class MainTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
// ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
// Person bean = (Person) applicationContext.getBean("person");
// System.out.println(bean);
//以前传配置文件,现在传配置类
ApplicationContext applicationContext = new AnnotationConfigApplicationContext(MainConfig.class);
Person bean = applicationContext.getBean(Person.class);
System.out.println(bean);
String[] namesForType = applicationContext.getBeanNamesForType(Person.class);
for (String name : namesForType) {
System.out.println(name);
}
}
}
使用注解开发的方式,采用@Bean的注解将组件注册到容器中。