请参考:Spring入门(二):自动化装配bean

教学内容

  1. Spring中的ioc常用注解
  2. 案例使用xml和注解方式实现单标的CRUD操作
    持久层技术选择:dbutils
  3. 改造基于注解的ioc案例,使用纯注解方式实现
    spring 的一些新注解使用
  4. spring和Junit的整合

使用注解前配置xml

core搜索xmlns:context就有了

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xsi:schemaLocation="http://www.springframework.org/schema/beans
  6. http://www.springframework.org/schema/beans/spring-beans.xsd
  7. http://www.springframework.org/schema/context
  8. http://www.springframework.org/schema/context/spring-context.xsd">
  9. <context:component-scan base-package="com.chajiu.service"></context:component-scan>
  10. </beans>

四个对应-注解和xml标签对应

  • 将该类创建为bean:同<bean>
    • @Component:把当前类对象存入spring容器
      • 属性value:指定key名,不写默认key为小写类名。
        @Component(value = "accountServicelmpl")或者
        @Component("accountServicelmpl")
    • @Controller:用于表现层
    • @Service:用于业务层
    • @Repository:用于持久层
    • 以上三个注解和@Component的作用和属性一模一样
    • 他们是spring框架为我们提供三层的明确注解,使我们对三层结构更加清晰
  • 用于注入参数:可以给成员变量注入,也可以给任何方法注入参数,spring会自动寻找合适的bean注入参数。同<property>
    • @Autowired
      • 自动按照类型注入,只要容器中有唯一的一个bean类型和要注入的变量类型相匹配,就可以注入成功
      • 出现位置:变量上或者方法上
      • image.png
      • 如果有多个类型匹配时,按照注入的变量的名称匹配,再不唯一就报错
    • @Qualifier
      • 在按照类型注入的基础上按照名称注入,给类成员注入时不能单独使用(必须配合@Autowired),但是给类方法注入可以单独使用
      • 属性value,指定bean的id
    • @Resource
      • 作用:直接按照bean的id注入,可以独立使用
      • 属性:name,指定bean的id
    • 上述注解只能用于注入Bean类型,无法注入基本数据类型和String
    • 且集合类型必须通过xml来实现
    • @Value
      • 用于注入基本数据类型和String
      • 属性value:用于指定数据的值,可以使用Spring中的SpEL(Spring的el表达式)
        • SpEL写法:${表达式}
  • 用于改变作用范围:同<bean>中的scope属性一样

    • @Scope
      • 指定bean的作用范围,写在类前
      • 属性:value,指定范围,常用取值:singletonprototype
        1. @Component(value = "accountService")
        2. @Scope("prototype")
        3. public class AccountServicelmpl implements IAccountService {
  • 和生命周期相关:同<bean>中的init-methoddestroy-method一样

Spring新注解-替代xml作用

参考Spring入门(三):通过JavaConfig装配bean

xml中,context:component-scan无法去除,且对jar中的类无法使用注解替代Bean标签,于是有两个新注解,帮助完全替代xml

  • 使用一个配置类,他的作用和bean.xml完全一样
  • 新注解:
    • @Configuration
      • 作用:指定当前类是个配置类,写在类名上面
    • @ComponentScan
      • 作用:通过注解指定spring需要扫描的包。与<context:component-scan base-package="com.chajiu"></context:component-scan>相同
      • 属性:
        • value/basePackage:指定要扫描的包
    • @Bean
      • 将当前方法的返回值作为Bean对象传入spring的ioc容器中
      • 属性
        • name:用于指定Bean的name,如果不写,默认Bean对象的name为这个类方法名。
      • 细节:如果你的方法有参数,spring会去容器中查找有无Bean对象自动注入参数依赖,@Autowired

配置应该注意xml和注解配合使用。

  • 自己的类注册为bean可以使用@component等注解
  • jar包中的类注册为bean只能使用xml配置或用配置类的@Bean获取