【sping揭秘】9、SpringIOC容器扩展

关于component-scan操作(去除,失效)

这个spring中的配置项,可以扫描我们对应的包下面的类,自动把带上@component,@service,@controller, @repository的类加入spring容器中托管

注意哦,component-scan 会默认吧annotation-config打开

但是不仅仅是这些,我们还可以对其中的范围进行限制

我们可以通过include-fileter和exclude-filter进行包含和排除

注意我们的范围选定方式有5种!

在我们没有排除之前:

<?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-4.3.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.3.xsd">

    <context:component-scan base-package="cn.cutter">
        <!-- 控制扫描范围 ,根据注解扫描进入容器-->
        <context:include-filter type="annotation" expression="cn.cutter"/>
        <!-- <context:exclude-filter type="aspectj" expression="* cn.cutter.noscan.*"/> -->
    </context:component-scan>
    <!-- <context:annotation-config /> 这个属性在component中默认已经是true了 -->
    
    <!-- 国际化配置 -->
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
    
        <property name="basenames">
            <list>
                <value>i18/users</value>
                <value>i18/errormsg</value>
            </list>
        </property>
    
    </bean>
    
    <bean id="ttmRateService" class="cn.cutter.simplefx.service.impl.MockTTMRateServiceImpl"></bean>
    
    <bean id="fooBar" class="cn.cutter.start.resourceloader.FooBar" />
    
    <bean id="fooBar2" class="cn.cutter.start.resourceloader.FooBar2" />
    
    <bean id="resourceDemo" class="cn.cutter.start.resourceloader.ResourceDemo">
        <property name="resource">
            <value>classpath:applicationContext-bean.xml</value>
        </property>
    </bean>
    
    <!-- <bean id="myObject" class="cn.cutter.start.bean.MyObject"></bean> -->

    <!-- <alias name="FXNewsProvider" alias="provideralias"/> -->
    
    <!-- <bean id="test4key2" ></bean>
    
    <bean id="" class="..." lazy-init="true">
        <constructor-arg>
            <ref bean=""  parent=""/>
        </constructor-arg>
        
        <property name="test1">
            <value>ttttt1</value>
            <idref bean="ttttt1"/>
        </property>
        
        <property name="test2">
            <list>
                <value>test2value</value>
                <ref bean="test2222"/>
                <idref bean="test22222"/>
                <bean class="..."></bean>
            </list>
        </property>
        
        <property name="test3">
            <set>
                <value>test2value</value>
                <ref bean="test2222"/>
                <idref bean="test22222"/>
                <bean class="..."></bean>
            </set>
        </property>
        
        <property name="test4">
            <map>
                <entry key="test4key1">
                    <value>something</value>
                </entry>
                
                <entry key-ref="test5key2">
                    <list>
                        <value>test2value</value>
                        <ref bean="test2222"/>
                        <idref bean="test22222"/>
                        <bean class="..."></bean>
                    </list>
                </entry>
            </map>        
        </property>
        
        
    </bean> -->
    
</beans>

测试

@Test
    public void testScan() {
        ApplicationContext ctx = this.before();
        
        //TestScan
        TestScan testScan = (TestScan) ctx.getBean("testScan");
        if(testScan == null) {
            System.out.println("扫描排除");
        } else {
            System.out.println("扫描进入");
            testScan.sayHello();
        }
    }

结果展示:

猜你喜欢

转载自www.cnblogs.com/cutter-point/p/8934331.html
今日推荐