spring 注解注入

来源:互联网 发布:迷你led显示屏软件 编辑:程序博客网 时间:2024/06/05 10:50


Bean 的配置方式:通过全类名(反射)、通过工厂方法(静态工厂方法和实例工厂方法)、通过FactoryBean

依赖注入的方式:属性注入;构造器注入;工厂方法注入

  • 组件扫描 : spring能够从classpath下自动扫描、侦测和实例化具有特定注解的组件
  • 特定组件
  1. @Component:基本注解,表示了一个受spring管理的组件
  2. @Respository:标识持久层组件
  3. @Service:标识服务层(业务层)组件
  4. @Controller:标识表现层组件
  • 注:目前spring无法区分这四个注解,因为IOC容器无法识别该类属于那个层,所以这四个注解可以混用,但建议进行区分
  • 当在组件类上使用了注解之后,还需要在spring的配置文件中声明<context:component-scan>
  • <context:component-scan> 中常用属性
  1. base-package 属性指定一个需要扫描的基类包,spring容器将会扫描这个基类包里及其子包中所有的类,当要扫描多个包的时候,可以使用逗号分隔,
  2. resouce-pattern属性 如果仅希望扫描特定的类而非基包下的所有类,可以使用该属性进行过滤
  • <context:component-scan> 子节点
  1. <context:include-filter>子节点标识要包含的目标类,此节点通常要将<context:component-scan>中的use-default-filters属性要设为false,默认情况下该属性为true
  2. <context:exclude-filter>子节点表示要排除在外的目标类
  • <context:component-scan> 中可以拥有多个<context:include-filter>子节点和<context:exclude-filter>子节点
  • <context:include-filter>子节点和<context:exclude-filter>子节点 常用属性
  1. type属性 可选值有:annotation常用、assinable常用、aspect不常用、regex不常用、custom不常用
  2. expression 属性
  • 利用注解建立bean和bean之间的关联关系
  • <context:component-scan>元素会自动注册AutowiredAnnocationBeanPostProcessor实例,该实例可以自动装配具有@Autowired和@Resource、@Inject注解的属性
  • 其中@Resource和@Inject注解的功能和@Autowired相似,建议使用@Autowired
  1. Autowired 注解自动装配具有兼容类型的单个bean属性,可以用在构造器、普通字段(即使是非public)一切具有参数的方法都可以使用@autowired注解
  2. 默认情况下,所有使用@autowired注解的属性都需要被设置,当spring找不到匹配的bean装配属性时,会抛异常。若某个属性允许不被设置,可以设置@autowired注解的required属性为false
  3. 默认情况下,当IOC容器里存在多个类型兼容的bean时,比如接口下有很多实现类,此时可以在@qualifiler注解提供bean的名称,或者spring允许对方发的入参标注@qualifier已指定注入bean的名称
  4. @autowired注解使用在数组类型的属性上,spring将会把所有匹配的bean进行自动装配
  5. @autowired注解使用在集合属性上,spring读取集合的类型信息,然后自动装配所有与之兼容的bean
  6. @autowired注解用在java.utill.map上时,若该map的键值为string,那么spring将自动装配与之map类型兼容的bean,此时bean的名称作为键值