spring通过注解配置

先讲下知识点:

使用spring注解后需要在spring配置中配置扫描组件

在classpath中扫描组件
1组件扫描(component scanning):Spring能够从classpath下自动扫描,侦测和实例化具有特定注解的组件
特定组件包括:
  @Component:基本注解,标识了一个受Spring管理的组件
  @Respository:标识持久层组件
  @Service:标识服务层(业务层)组件
  @Controller:标识表现层组件
对于扫描到的组件,Spring有默认的命名策略:使用非限定类名,第一个字母小写,也可以在注解中通过value属性值标识组件的名称

当在组件类上使用了特定的注解之后,还需要在Spring的配置文件中声明<context:component-scan>:
-base-package属性指定一个需要扫描的基类包,Spring容器将会扫描这个基类包及其包中的所有类
-当需要扫描多个包时,可以使用逗号分隔
-如果仅希望扫描特定的类而非基包下的所有类,可使用resource-pattern属性过滤特定的类,实例:
<context:component-scan 
base-package="com.test.ceshi.beans"
resource-pattern="autowire/*.class"/>
-<context:include-filter>子节点表示要包含的目标类
-<context:exclude-filter>子节点表示要排除在外的目标类
-<context:component-scan>下可以拥有若干个<context:include-filter>和<context:exclude-filter>子节点


组件装配
<context:component-scan>元素还会自动注册AutowiredAnnotationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性
使用@Autowired自动装配Bean
@Autowired注解自动装配具有兼容类型的单个bean属性
1 构造器,普通字段(即使是非public),一切具有参数的方法都可以应用@Autowired注解
2 默认情况下,所有使用@Autowired注解的属性都需要被设置,当Spring找不到匹配的bean装配属性时,会抛出异常,若某一属性允许不被设置,可以设置@Autowired注解的required属性为false
3 默认情况下,当IOC容器里存在多个类型兼容的bean时,通过类型的自动装配将无法工作,此时可以在@Qualifier注解里提供bean的名称,Spring允许对方法的入参标注@Qualifiter以指定注入bean的名称
4 @Autowired注解也可以应用在数组类型的属性上,此时Spring将会把所有匹配的bean进行自动装配
5 @Autowired注解也可以应用在集合属性上,此时spring读取该集合的类型信息,然后自动装配所有与之兼容的bean
6 @Autowired注解用在java.util.Map上时,若该Map的键值为String,那么Spring将会自动装配与之Map值类型警容的bean,此时bean的名称作为键值

使用@Resource或@Inject自动装配bean
Spring还支持@Resource和@Inject注解,这两个注解和@Autowired注解的功用类似
@Resource注解要求提供一个bean名称的属性,若该属性为空,则自动采用标注出的变量或方法名作为bean的名称
@Inject和@Autowired注解一样也是按类型匹配注入的Bean,但没有required属性
建议使用@Autowired注解

以上就是知识点:下面看实例:

先截知识点少的类:





UserRepositoryImpl知识点1


userRepositoryimpl知识点2


相关spring的xml配置文件,测试时打开对应注释就好




总体测试及建的包啥的


猜你喜欢

转载自blog.csdn.net/youjiangtengwan1/article/details/54137265
今日推荐