Spring学习第二天:Spring框架中基于注解的IOC配置

用于创建对象的:

  • Component: 作用:用于把当前类对象存入spring容器
    * 属性:
    + value :用于指定bean的id 当我们不写时,默认为当前类名的首字母小写的形式
  • Controller: 一般再表现层
  • Service:一般用在业务层
  • Repository:一般用在持久层
    注意: 以上三个注解他们的作用和属性与Component时相同的它们三个是spring框架为我们提供明确的三层使用的注解,使我们的三层对象更加清晰

用于注入数据的:

  • Autowired
    • **作用:**自动按照类型注入,
      + 只要容器中有一个唯一的一个bean对象类型和要注入的变量类型匹配,就可以注入成功
      + 如果ioc容器没有任何bean类型和注入的变量类型匹配,则报异常
      + 如果Ioc容器中有多个类型匹配时,通过数据类型先找相同的域,然后通过变量名找到对应的bean类型
    • 出现位置: 可以在变量上,也可以在方法上
    • 细节: 在使用注解注入时,set方法就不是必须的了
  • Qualifier
    • 作用: 在按照类中注入的基础之上再按照名称注入。它在给类成员注入时不能单独使用,但是在给方法参数注入时可以
    • 属性:
      + value:用于指定注入的bean的id
  • Resource
    • 作用:直接按照bean的id注入,它可以独立使用
    • 属性
      + name:用于指定bean的id

注意: 以上三个注入都只能注入其他bean类型的数据,而基本类型和String类型无法使用上述注解实现,另外,集合类型的注入只能通过XML来实现

  • Value
    * 作用:用于注入基本类型和String类型的数据
    * 属性:
    • value:用于指定数据的值,它可以使用spring中的SpEl(即spring的el表达式)
      SqEL的写法, ${表达式}

用于改变作用范围的:

他们的作用就和在bean标签中使用scope属性实现的功能时一样的

  • Scope
    • 作用:用于指定bean的作用范围
    • 属性:
      • value:指定取值的范围,常用取值 singleton(单例) prototype(多例)

和生命周期相关:(了解)

作用就和在bean标签中使用init-method 和destory-method的作用是一样的

  • PreDestory()
    *作用: 用于指定销毁方法

  • PostConstruct()
    *作用: 用于指定初始化方法

==最后:==要在xml配置文件告知spring容器在创建容器时要扫描的包

<context:component-scan base-package="com.xatu"></context:component-scan>

多例对象的销毁Spring不负责,靠垃圾回收机制

以上方式的基于注解还是需要配置文件(bean.xml)的,因为其中还要告知spring容器在创建容器时要扫描的包。而一下一些注解可以是我们完全不使用xml文件,而是在一个类中配置即可

  • @Configuration

    • 作用:指定当前类是一个配置类
    • 细节:当配置类作为AnnotationConfigApplicationContext对象创建的参数时,该注解可以不写
  • @ComponentScan

    • 作用:用于通过注释指定spring在创建容器时要扫描的包
    • 属性:value:和basePackages的作用是相同的,都是用于指定创建容器时要扫描的包

    使用此注解就相当于在xml中配置了

  • @Bean :用于将当前方法的返回值作为bean对象存入spring的容器中

    • 属性
      + name:用于指定bean的id,当不写时,默认值为当前方法的名称
    • 细节
      + 当我们使用注解配置方法时,如果方法有参数,spring框架会去容器中查找有没有可用的bean对象
      查找的方式和Autowired注解是一样的,如果有唯一一个类型就匹配,没有的话会报错,有多个的话,通过数据类型先找相同的域,然后通过变量名找到对应的bean类型
  • @Import

    • 作用:引入其他配置类
    • 属性
      + value:指定其他配置类的字节码
      在使用这些新注解在类中取代xml文件时,在使用时就不可以用ClassPathXmlApplicationContext,而是应该使用AnnotationConfigApplicationContext
ApplicationContext ac = new AnnotationConfigApplicationContext(被配置的类的名字.class);
  • @PropertySource("")
    • 作用:用于指定properties文件的位置
    • 属性
      + value:指定文件的名称和路径
      • 关键字:classpath: 表示类路径下
        示例:
@PropertySource("classpath:jdbc.properties")
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章