zoukankan      html  css  js  c++  java
  • 《Spring in action》之装配Bean

    创建应用对象之间协作关系的行为通常称为装配,这也是依赖注入的本质。
    Spring装配Bean的三种主要机制:
    1.在XML中进行显示配置
    2.在java中进行显示配置
    3.隐式的bean发现机制和自动装配
    1.自动化装配
      1.组件扫描:spring会自动发现上下文中创建的Bean
      2.自动装配:Spring自动满足bean之间的依赖
    组件扫描
    public interface Phone {
        void speak();
    }
    @Component定义组件,@Component("apple")可以指定组件id
    @Component
    public class Apple implements Phone{
        @Override
        public void speak() {
            System.out.println("apple speak");
        }
    }
    
     
    创建配置类:
    注解@ComponentScan启用了组件扫描,basePackages扫描指定单个包,多个包(basePackages ={"",""})
    @Configuration
    //@ComponentScan(basePackages = "com.spring.ioc.autowiring")
    @ComponentScan(basePackages = {"com.spring.ioc.autowiring","com.spring.di"})
    public class PhoneConfig {
    }
     
    这里也可以不用这个类配置@ComponentScan,可用xml配置
    <!-- 启用组件扫描-->
    <context:component-scan base-package="com.spring.ioc.autowiring"/>

    测试:

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = PhoneConfig.class)
    public class PhoneTest {
        @Autowired
        private Phone phone;
        @Test
        public void checkPhone(){
            phone.speak();
            Assert.assertNotNull(phone);
        }
    }
     
    自动装配
    @Autowired
    public class Xiaoming {
        private Phone phone;
        //这里不管是构造方法、set方法、普通方法@Autowired都能自动装配
        @Autowired
        public Xiaoming(Phone phone) {
            this.phone = phone;
        }
    
        public void speak(){
            phone.speak();
        }
    }
    
     
    2.通过java代码装配bean
    代码如下:
    public class XiaoMi implements Phone{
        @Override
        public void speak() {
            System.out.println("小米。。。。。。");
        }
    }
    
    创建配置类:
    @Configuration
    public class JavaConfig {
    
        @Bean
        public Phone getPhone(){
            return new XiaoMi();
        }
    }  
    junit测试:
    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = JavaConfig.class)
    public class JavaConfigTest {
        @Autowired
        private Phone phone;
        @Test
        public void checkPhone(){
            phone.speak();
            Assert.assertNotNull(phone);
        }
    }
    也可以通过如下main测试
    public static void main(String[] args) {
        //加载java配置类获取Spring应用上下文
        ApplicationContext ac = new AnnotationConfigApplicationContext(JavaConfig.class);
        XiaoMi xiaoMi= ac.getBean(XiaoMi.class);
        xiaoMi.speak();
    }
    3.在XML中进行显示配置
    声明bean用<bean id="xxx" class="xxx">标签
  • 相关阅读:
    【Mybatis源码解析】- JDBC连接数据库的原理和操作
    【JDK源码解析】- ArrayList源码解析,绝对详细
    【设计模式】-代理模式及动态代理详解
    【Java基础】反射机制及应用
    Go 中的 channel 与 Java BlockingQueue 的本质区别
    Github Actions 还能做这些事
    写了一个 gorm 乐观锁插件
    Go 去找个对象吧
    Web 自动化测试全面提升之 Pytest
    【51testing专访】web自动化,从入门到进阶
  • 原文地址:https://www.cnblogs.com/monkjavaer/p/9710528.html
Copyright © 2011-2022 走看看