【sping揭秘】10、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 >--> <!-- <alias name="FXNewsProvider" alias="provideralias"/> --> <!-- <bean ></bean> <bean > <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(); } }
结果展示: