Spring-ioc

简介

Spring 是一个开源框架.
Spring 为简化企业级应用开发而生. 使用 Spring 可以使简单的 JavaBean 实现以前只有 EJB 才能实现的功能.
Spring 是一个 IOC[Inversion of control](DI[Dependency Injection]) 和 AOP[Aspect Oriented Programming] 容器框架.

特点

  • 轻量级:Spring 是非侵入性的 - 基于 Spring 开发的应用中的对象可以不依赖于 Spring 的 API
    依赖注入(DI — dependency injection、IOC)
  • 面向切面编程(AOP — aspect oriented programming)
  • 容器: Spring 是一个容器, 因为它包含并且管理应用对象的生命周期
  • 框架: Spring 实现了使用简单的组件配置组合成一个复杂的应用. 在 Spring 中可以使用 XML 和 Java 注解组合这些对象
  • 一站式:在 IOC 和 AOP 的基础上可以整合各种企业应用的开源框架和优秀的第三方类库 (实际上 Spring 自身也提供了展现层的 SpringMVC 和 持久层的 Spring JDBC)

ioc/di

ioc(Inversion of Control,控制倒转)

这是spring的核心,贯穿始终。所谓IoC,对于spring框架来说,就是由spring来负责控制对象的生命周期和对象间的关系。

di(Dependency Injection,依赖注入)

比如对象A需要操作数据库,以前我们总是要在A中自己编写代码来获得一个Connection对象,有了spring我们就只需要告诉spring,A中需要一个Connection,至于这个Connection怎么构造,何时构造,A不需要知道。

<dependencies>
		<!-- Spring 基础依赖 ioc -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.3.12.RELEASE</version>
		</dependency>
	</dependencies>

初始化spring容器

//具体文件系统的文件路径
ApplicationContext context = new FileSystemXmlApplicationContext("xxx.xml");  
//相对路径class目录
ApplicationContext context = new ClassPathXmlApplicationContext("xxx.xml");  

bean 的声明(对象注入)

  • 在xml声明

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
        <bean id="名字" class="类型">  
        </bean>  
    </beans>
    
  • 使用注解

    @Component:当对组件的层次难以定位的时候使用这个注解
    @Controller:表示控制层的组件
    @Service:表示业务逻辑层的组件
    @Repository:表示数据访问层的组件
    

依赖注入的方式

  • 在xml声明

    1. 基于setter注入

      <bean id="xxx" class="com.xxx.pojo.Student"  >  
      	<property name="name" value="张三"/>  
      </bean>  
      <bean id="t1" class="com.xxx.pojo.Teacher">  
      	<property name="name" value="王老师"/>   
      </bean>  
      <bean id="t2" class="com.xxx.pojo.Teacher">  
      	<property name="name" value="陈老师"/>   
      </bean>  
      
    2. 构造器注入 https://www.cnblogs.com/fps2tao/p/7268475.html

      <bean id="l" class="com.baobaotao.anno.LogonService">
      	<constructor-arg  ref="logDao"></constructor-arg>
      	<constructor-arg ref="userDao"></constructor-arg>
      </bean>
      
    3. 基于工厂注入(现在已经不用)

  • 使用注解

    @Value(value=“xxx”)

Bean 的 Scope属性

 Scope
 	--singleton	单例(默认)从容器中获取到的对象地址都是同一个
 	--prototype 原型 从容器获取到的对象都是新的对象,地址不一样

自动注入

  • 在需要自动注入的bean的声明autowire属性。

    • byType(根据类型自动装配): 若 IOC 容器中有多个与目标 Bean 类型一致的 Bean. 在这种情况下, Spring 将无法判定哪个 Bean 最合适该属性, 所以不能执行自动装配.
    • byName(根据名称自动装配): 必须将目标 Bean 的名称和属性名设置的完全相同.
  • 使用注解自动注入

    • @Autowired 注解自动装配具有兼容类型的单个 Bean属性(根据类型注入,若需要根据名字注入@Qualifier(“xxx”) )

    • @Resource 注解要求提供一个 Bean 名称的属性,若该属性为空,则自动采用标注处的变量或方法名作为 Bean 的名称

    • @Inject 和 @Autowired 注解一样也是按类型匹配注入的 Bean, 但没有 reqired 属性

      建议使用 @Autowired 注解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值