spring之component-scan自动扫描bean

版权声明:文章编写不易,转载请注明原链接 https://blog.csdn.net/u012184539/article/details/84875357


之前讲到可以通过beans元素下面配置bean,可以使用xml或注解自动装配bean属性。现在,spring还可以自动把POJO(简单Java对象)自动配置为bean,不再需要用xml中配置bean元素。

一. 启用自动扫描bean

在beans配置文件中配置<context:component-scan>元素启用自动扫描。spring会在指定的包下扫描bean。

 <context:component-scan base-package="xyz.totok"/>

二. 使用特殊注解需要自动配置的Java类

启用自动扫描bean后,spring会扫描具有特殊注解的Java类,然后把这些类对象添加应用上下文中配置为bean。特殊注解如下:

  1. @Component 通用的构造型注解,标识该类为spring组件。
  2. @Controller 标识该类定义为Spring MVC Controller
  3. @Repository 标识该类定义为数据仓库
  4. @Service 标识该类定义为服务
  5. 使用@Component标注的任意自定义注解

如下使用@Component标识的类

@Component
public class User{}

这个时候spring会自动添加一个user的bean到应用上下文中。
也可以自定义bean的id

@Component("andy")
public class User{}

三. 扫描过滤

扫描过滤机制:<context:include-filter>和<context:exclude-filter>添加扫描过滤内容。如下把所有User的派生类添加到bean。

<context:component-scan base-package="xyz.totok">
   		<context:include-filter type="assignable" expression="xyz.totok.User"/>
</context:component-scan>

扫描过滤通过两个属性(type和expression)来决定过滤规则。type代表扫描类型,总共有5种扫描类型。

过滤器类型 描述
annotation 扫描使用指定注解所标注的类,通过expression来指定要扫描的注解
assignable 扫描派生于expression属性指定的那些类
aspectj 扫描expression属性指定的Aspect J表达式所匹配的那些类
custom 使用自定义的过滤实现类,该类由expression属性决定,该类实现org.springframework.core.TypeFilter
regex 扫描类名称与expression指定的正则表达式匹配的那些类

四. 自定义扫描配置类

component-scan会扫描指定包下面的@Configuration标注的类,该注解标注的类等价于<beans>元素。然后使用@Bean标注bean。

@Configuration
public class SpringMyConfig{
	@Bean
	public User user1(){
		return new User();
	}
}

猜你喜欢

转载自blog.csdn.net/u012184539/article/details/84875357