zoukankan      html  css  js  c++  java
  • @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

     
  • 相关阅读:
    Spring注解@Component、@Repository、@Service、@Controller @Resource、@Autowired、@Qualifier 解析
    Oracle Instant Client 安装配置
    Android Studio配置文件路径修改
    Java压缩技术(三) ZIP解压缩——Java原生实现
    Java压缩技术(二) ZIP压缩——Java原生实现
    Java压缩技术(一) ZLib
    [JavaEE] JBoss主要版本下载链接一览
    EL表达式
    如何实现hibernate的缓存机制
    如何理解hibernate当中的锁机制
  • 原文地址:https://www.cnblogs.com/xichji/p/11343754.html
Copyright © 2011-2022 走看看