@Configuration与@Bean

1,@Configuration与@Bean
 
@Configuration:
告诉Spring这是一个配置类,配置类==配置文件。
  •  @Configuration==beans.xml
@Bean:
  •  给容器中注册一个Bean;类型为返回值的类型,id默认是用方法名作为id。
  •  @Bean 等价于 <bean></bean>
  •  可以给@Bean设置value来修改id,比如@Bean("personAlias")。
  •  可以在@bean中指定初始化和销毁方法
@Bean(value = "beanLife",initMethod = "init", destroyMethod = "destroy")

等价于

<bean id="person" class="com.java.model.Person"  init-method="init" destroy-method="destroy"></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

 

 


 
posted @ 2019-08-13 08:58  大码哥  阅读(556)  评论(0编辑  收藏  举报