spring能够从classpath下自动扫描、侦测和实例化具有特定注解的组件。
特定组件包括:
@Component:基本注解,标识了一个受spring管理的组件。
@Respository:标识持久层组件。
@Service:标识业务层组件。
@Controller标识表现层组件。
基于注解配置bean:
1、对于想要由spring管理的bean,在对应的类里面加上相应的注解。
2、在配置文件中,配置上<context:component-scan base-package=" "></context:component-scan>,base-package的属性值代表spring对这个包下的类和这个包的子包下的类进行自动扫描,寻找特定的组件进行管理。
3、在<context:component-scan></context:component-scan>下的子节点<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>,exclude-filter就代表了不包含某个组件。我上面配置的这条就代表:扫描某个包下的组件时不包括Respository。
4、<context:component-scan base-package=" " use-default-filters="false">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
</context:component-scan>
在context:component-scan里面设置属性use-default-filters="false",设置它下面的子节点context:include-filter,这样设置的目的是:只扫描某个包下的某个组件,这里配置的是只扫描Respository。
5、上面两个子节点中的属性type="annotation",对上面两个子节点的属性值修改:将type的值改为assignable,expression的值改为某个类的全类名,就变成了不对某个类及其实现类进行扫描或者是只对某个类及其实现类进行扫描。