Spring基础-IOC容器(一)

接口

  • 用于沟通的中介物的抽象化
  • 实体把自己提供给外界的一种抽象化说明,用以由内部操作分离出外部沟通方法,使其能被修改内部而不影响外界其他实体与其交互的方式
  • 对应Java接口即声明,声明了哪些方法是对外公开提供的
  • 在Java8中,接口可以拥有方法体

面向接口编程

  • 结构设计中,分清层次及调用关系,每层只向外(上层)提供一组功能接口,各层间仅依赖接口而非实现类
  • 接口实现的变动不影响各层间的调用,这一点在公共服务中尤为重要
  • “面向接口编程”中的”接口”是用于隐藏具体实现和实现多态性的组件

IOC

  • IOC:控制反转,控制权的转移,应用程序本身不负责依赖对象的创建和维护,而是由外部容器负责创建和维护

  • DI:依赖注入,是IOC的一种实现方式。由IOC容器在运行期间,动态地将某种依赖关系注入到对象之中。

  • 目的:创建对象并且组装对象之间的关系

为什么要用IOC容器

  • 对象创建统一托管
  • 规范的生命周期管理
  • 灵活的依赖注入
  • 一致的获取对象
  • 实例化的对象都是单例的

Bean容器初始化

1.基础:两个包

- org.springframework.beans
- org.springframework.context
- BeanFactory提供配置结构和基本功能,加载并初始化Bean
- ApplicationContext保存了Bean对象并在Spring中被广泛使用

2.方式,ApplicationContext

  • 本地文件
FileSystemXmlApplicationContext context = new FileSystemXmlApplicationContext("F:/workspace/applicationContext.xml");
  • Classpath
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:spring-context.xml");
  • Web应用中依赖servlet或Listener
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<serlet>
    <servlet-name>context</servlet-name>
    <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

Spring注入

指在启动Spring容器加载bean的时候,完成对变量的赋值行为。

  1. XML注入方式

使用场景:

1:Bean实现类来自第三方类库,如:DataSource等

2:需要命名空间配置,如:context、aop、mvc等。

常用的两种注入方式:
- 设值注入

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd >

    <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
        <property name="injectionDao" ref="injectionDao"></property>
    </beans>

    <bean id="injectionDao" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></beans>

</beans>

其中,property中的name必须和成员变量中名称一模一样

  • 构造注入
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
    http://www.springframework.org/schema/beans/spring-beans.xsd >

    <bean id="injectionService" class="com.imooc.ioc.injection.service.InjectionServiceImpl">
        <constructor-arg name="injectionDao" ref="injectionDao"></constructor-arg>
    </beans>

    <bean id="injectionDao" class="com.imooc.ioc.injection.dao.InjectionDAOImpl"></beans>

</beans>

其中,constructor-arg中的name必须和构造参数中一模一样

  1. 注解注入方式

使用场景:

项目自身开发使用的类,可直接在代码中使用注解,如:@Service、@Controller

3.Java配置类注入方式

使用场景:

需要通过代码控制对象创建逻辑的场景,如:自定义修改依赖类库。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值