版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_37107022/article/details/88877156
1. @Configuration与@Bean
@Configuration:
告诉Spring这是一个配置类,配置类==配置文件。
@Configuration==beans.xml
@Bean:
给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id,可以给@Bean设置value来修改id,比如@Bean("personAlias")。
@Bean==<bean></bean>
2.配置对比与验证
通常的xml配置方式如下,beans.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.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
<!-- use-default-filters若想自定义过滤器生效,则必须将该值设为false-->
<!--<context:component-scan base-package="com.java" ></context:component-scan>-->
<!--注入bean-->
<beans>
<bean id="person" class="com.java.model.Person">
<property name="id" value="11111"></property>
<property name="name" value="vhsj"></property>
</bean>
</beans>
</beans>
采用@Configuration注入方式如下:
@Configuration
public class BeanConfig {
//@Bean
@Bean("personAlias")
public Person person2(){
return new Person("2222","lisi");
}
}
测试如下:
public class BeanDependencyInjectionTest {
public static void main(String[] args) {
System.out.println("-----------------------------xml 方式注入-----------------------------------");
//xml 方式注入
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println("person---->"+person);
//获取所有注入Bean的名称
String[] beanDefinitionNames = applicationContext.getBeanDefinitionNames();
for (String name : beanDefinitionNames) {
System.out.println(name);
}
System.out.println("-----------------------------annotation 注解方式注入-----------------------------------");
//annotation 注解方式注入
ApplicationContext applicationContext1 = new AnnotationConfigApplicationContext(BeanConfig.class);
Person person1 = applicationContext1.getBean(Person.class);
System.out.println("person1---->"+person1);
//获取所有注入Bean的名称
String[] beanDefinitionNames1 = applicationContext1.getBeanDefinitionNames();
for (String name : beanDefinitionNames1) {
System.out.println(name);
}
}
}
运行结果:
-----------------------------xml 方式注入-----------------------------------
person---->Person{id='11111', name='vhsj'}
person
-----------------------------annotation 注解方式注入-----------------------------------
person1---->Person{id='2222', name='lisi'}
org.springframework.context.annotation.internalConfigurationAnnotationProcessor
org.springframework.context.annotation.internalAutowiredAnnotationProcessor
org.springframework.context.annotation.internalCommonAnnotationProcessor
org.springframework.context.event.internalEventListenerProcessor
org.springframework.context.event.internalEventListenerFactory
beanConfig
personAlias