zoukankan      html  css  js  c++  java
  • Spring(004)-Bean装配

    一,问题,Bean找不到

    代码

    @Component
    public class DemoClass {
    
        public int doSth() {
            return 1;
        }
    }

    测试代码

    @RunWith(SpringJUnit4ClassRunner.class)
    public class DemoClassTest {
    
        @Autowired
        private DemoClass demoClass;
    
        @Test
        public void doSth() {
            Assert.assertEquals(1, demoClass.doSth());
        }
    }

    虽然DemoClass打了@Component注解,但是在测试代码中@Autowired是找不到到,因为DemoClass是没有被Spring装配到容器中。

    Spring把Bean装配到容器主要有以下几种方式

    二、通过代码方式

    @Configuration注解的方式

    新建一个类,增加@Configuration注解

    @Configuration
    @ComponentScan(basePackages = "com.purespring.demo")
    public class DemoConfiguration {
    
    }

    这里面还有一个@ComponentScan,这个注解告诉Spring要扫描的包,Spring会通过这个配置把这个包下面的组件全部装配到容器中。

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(classes = DemoConfiguration.class)
    public class DemoClassTest {
    
        @Autowired
        private DemoClass demoClass;
    
        @Test
        public void doSth() {
            Assert.assertEquals(1, demoClass.doSth());
        }
    }

    测试通过。

    @Bean的方式

    @Configuration
    public class DemoConfiguration {
        @Bean
        public DemoClass demoClass() {
            return new DemoClass();
        }
    }

    上面代码里面已经移除了@ComponentScan的注解,Spring不会做自动扫描,

    @Bean会告诉Spring这个方法会返回一个对象,该对象需要被注册成一个Spring Bean

    三、通过XML配置

    增加xml配置,命名为demoConfig.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 https://www.springframework.org/schema/context/spring-context.xsd">
        <context:component-scan base-package="com.purespring.demo"></context:component-scan>
    </beans>

    在测试代码中引入配置

    @RunWith(SpringJUnit4ClassRunner.class)
    @ContextConfiguration(locations = "/demoConfig.xml")
    public class DemoClassTest {
    
        @Autowired
        private DemoClass demoClass;
    
        @Test
        public void doSth() {
            Assert.assertEquals(1, demoClass.doSth());
        }
    }

    测试通过。

  • 相关阅读:
    当再多大公司慢慢的放弃微软的技术时, 不知大家怎想?
    【叶子函数分享五十四】汉字转拼音函数 [转]
    java_easyui体系之DataGrid(4)[转]
    java_easyui体系之DataGrid(3)[转]
    java_easyui体系之DataGrid(2)[转]
    java_easyui体系之DataGrid(1)[转]
    java_easyui体系之目录 [转]
    Java 并发和多线程(三) 多线程的代价 [转]
    Java 并发和多线程(二) 多线程的优点 [转]
    Java 并发和多线程(一) Java并发性和多线程介绍[转]
  • 原文地址:https://www.cnblogs.com/Brake/p/11921585.html
Copyright © 2011-2022 走看看