spring之Ioc核心

1. ApplicationContext 接口的实现类

  • ClassPathXmlApplicationContext:它是从类的根路径下加载配置文件(推荐使用)
  • FileSystemXmlApplicationContext:它是从磁盘路径上加载配置文件,配置文件可以在磁盘的任意位置。
  • AnnotationConfigApplicationContext:当我们使用注解配置容器对象时,需要使用此类来创建spring 容器,它用来读取注解。

2. BeanFactory 和ApplicationContext 的区别

  • BeanFactory 才是Spring 容器中的顶层接口,ApplicationContext 是它的子接口。ApplicationContext包含BeanFactory的所有功能,除此还提供了更完整的框架功能:

    • 继承MessageSource,因此支持国际化。

    • 统一的资源文件访问方式。

    • 提供在监听器中注册bean的事件。

    • 同时加载多个配置文件。

      通常建议优先使用ApplicationContext 。

  • 创建对象的时机不一样:

    • ApplicationContext:它在创建对象采取的策略是立即加载的方式,也就是说只要一读取配置文件,默认情况下就会创建对象。适用于单例对象。
    • BeanFactory:它在创建核心容器时,创建对象采取的策略时延迟加载,也就是说,什么时候根据id获取对象了,什么时候才真正的创建对象。使用于多例对象。

3. sping创建对象的3种方式

  • 使用默认构造函数创建。在spring的配置文件中使用bean标签,配以id和class属性之后,且没有其他属性和标签时。采用的就是默认构造函数创建bean对象,此时如果类中没有默认构造函数,则对象无法创建。
  <bean id="accountService" class="com.liuyh.service.impl.AccountServiceImpl"></bean>
  • 使用普通工厂中的方法创建对象(使用某个类中的方法创建对象,并存入spring容器
   <bean id="instanceFactory" class="com.liuyh.factory.InstanceFactory"></bean>
   <bean id="accountService" factory-bean="instanceFactory" factory-method="getAccountService">	    </bean>
package com.liuyh.factory;

import com.liuyh.service.AccountService;
import com.liuyh.service.impl.AccountServiceImpl;

public class InstanceFactory {

    public AccountService getAccountService(){
        return new AccountServiceImpl();
    }
}

  • 使用工厂中的静态方法创建对象(使用某个类中的静态方法创建对象,并存入spring容器)
<bean id="accountService" class="com.liuyh.factory.StaticFactory" factory-method="getAccountService"></bean>
package com.liuyh.factory;

import com.liuyh.service.AccountService;
import com.liuyh.service.impl.AccountServiceImpl;

public class StaticFactory {

    public static AccountService getAccountService(){

        return new AccountServiceImpl();
    }
}

4. bean的作用范围与生命周期

  • scope:指定对象的作用范围。

    • singleton :默认值,单例的。一个应用只有一个对象的实例。它的作用范围就是整个引用。
    • prototype :多例的。每次访问对象时,都会重新创建对象实例。
    • request:WEB应用中,Spring创建一个Bean的对象,将对象存入到request域中。
    • session:WEB应用中,Spring创建一个Bean的对象,将对象存入到session域中。
    • global session:作用于集群环境中的会话范围(全局会话范围),当不是集群环境时,它就是session。
  • 生命周期

    • singleton生命周期
      • 对象出生:当应用加载,创建容器时,对象就被创建了。
      • 对象活着:只要容器在,对象一直活着。
      • 对象死亡:当应用卸载,销毁容器时,对象就被销毁了。
    • prototype生命周期
      • 对象出生:当使用对象时,创建新的对象实例。
      • 对象活着:只要对象在使用中,就一直活着。
      • 对象死亡:当对象长时间不用时,被java的垃圾回收器回收了。

5. 依赖注入实现方式

主要有两种实现方式,分别是属性 setter 注入构造方法注入

6. spring常用注解

6.1 用于创建对象的注解

相当于:<bean id="" class="">

6.1.1 @Component

  • 作用: 把资源让spring来管理。相当于在xml中配置一个bean。
  • 属性: value:指定bean的id。如果不指定value属性,默认bean的id是当前类的类名,并且首字母小写。

6.1.2 @Controller @Service @Repository

​ 这三个注解都是针对Component的衍生注解,作用及属性都是一模一样的,只不过是提供了更加明确的语义化。

  • @Controller:一般用于表现层的注解。
  • @Service:一般用于业务层的注解。
  • @Repository:一般用于持久层的注解。

6.2 用于注入数据的注解

相当于:<property name="" ref=""> 或者<property name="" value="">

6.2.1 @Autowired

  • 自动按照类型注入。
  • 当使用此注解注入属性时,set方法可以省略。它只能注入其他bean类型。
  • 当有多个类型匹配时,使用要注入的对象变量名称作为bean的id,在spring容器查找,找到了也可以注入成功,找不到就报错。

6.2.2 @Qualifier

  • 作用: 在自动按照类型注入的基础之上,再按照Bean的id注入。它在给字段注入时不能独立使用,必须和@Autowire一起使用;但是给方法参数注入时,可以独立使用。
  • 属性: value:指定bean的id。

6.2.3 @Resource

  • 作用: 直接按照Bean的id注入,它也只能注入其他bean类型。
  • 属性: name:指定bean的id。

6.2.4 @Value

  • 作用: 注入基本数据类型和String类型数据的
  • 属性: value:用于指定值

6.3 用于改变作用范围的注解

相当于:<bean id="" class="" scope="">

6.3.1 @Scope

  • 作用: 指定bean的作用范围。
  • 属性: value:指定范围的值。 取值:singleton prototype request session globalsession

6.4 和生命周期相关的注解

相当于:<bean id="" class="" init-method="" destroy-method="" />

6.4.1 @PostConstruct

  • 作用: 用于指定初始化方法。

6.4.2 @PreDestroy

  • 作用: 用于指定销毁方法。

6.5 配置类注解

6.5.1 @Configuration

  • 作用: 用于指定当前类是一个spring配置类,当创建容器时会从该类上加载注解。获取容器时需要使用AnnotationApplicationContext(有@Configuration注解的类.class)。
  • 属性: value:用于指定配置类的字节码

6.5.2 @ComponentScan

  • 作用: 用于指定spring在初始化容器时要扫描的包。作用和在spring的xml配置文件中的: <context:component-scan base-package=""/>是一样的。
  • 属性: basePackages:用于指定要扫描的包,和该注解中的value属性作用一样。

6.5.3 @PropertySource

  • 作用:用于加载properties文件中的配置。例如我们配置数据源时,可以把连接数据库的信息写到properties配置文件中,就可以使用此注解指定properties配置文件的位置。
  • 属性: value[]:用于指定properties文件位置。如果是在类路径下,需要写上classpath:

6.5.4 @Import

  • 作用: 用于导入其他配置类,在引入其他配置类时,可以不用再写@Configuration注解,写上也没问题。
  • 属性: value[]:用于指定其他配置类的字节码。

6.6 用于方法上的注解

6.6.1 @Bean

  • 作用: 该注解只能写在方法上,表明使用此方法创建一个对象,并且放入spring容器。
  • 属性: name:给当前@Bean注解方法创建的对象指定一个名称(即bean的id)。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值