从零开始学Spring

学习就是知道未知的事情,如何向一个人解释清楚一个他未知的概念?
答案就是用已知的概念去类比他未知的概念

spring 是什么? 有什么用?
spring 是java的一个框架
目的是为了解决企业开发的复杂性(可以使java程序更快速,更简便,更安全)

怎么解决程序之间的复杂性?
将所有程序集中放入一个中间件,进行集中式的管理

bean是什么?
包装过的对象,包装的目的:统一规格

什么是IOC?(幼儿园招生的过程)(解耦,将一堆小朋友交到一个地方)
IoC - Inversion of Control, 控制反转:把创建和管理 bean 的过程转移给了第三方(第三方是一个容器,名字叫IOC container)(IOC这个过程的目的是为了让bean得到统一的处理)

为什么有IOC continer?(容器相当于一个幼儿园,里面幼儿园老师管理小朋友)
因为项目中每次创建对象是很麻烦的,所以我们使用 Spring IoC 容器来管理这些对象,需要的时候你就直接用,不用管它是怎么来的、什么时候要销毁,只管用就好了

IOC容器负责(幼儿的老师)

  1. 创建、配置和管理bean
  2. 管理bean的生命
  3. 控制bean的依赖注入

如何设计IOC container?(通过什么方式建立幼儿园)
使用 ApplicationContext 这个类,它是 BeanFactory(可以管理任何类型的对象)的子类
Beanfactory 可以理解为Hashmap (key,value形式:bean name,bean object)

为什么不直接使用 BeanFactory
BeanFactory一般只有 get 和 put 功能,所以称之为“低级容器”。
ApplicationContext 多了很多功能,因为它继承了多个接口,可称之为“高级容器”。

IOC container 怎样获取 bean?(招生)
通过读取 configuration metadata (学生申请名单)获得关于要实例化、配置和组装哪些对象的信息(决定要哪些学生,学生之间还可以建立联系,如班长,学习委员等)

Container本身内,这些bean定义表示为BeanDefinition对象(学号,包含了这个学生所有的信息)
BeanDefinition对象里面的 metadata(如包限定的类名)表示单个bean的一组属性(真正表示学生的所有信息)

所以获取bean的方式就是读取configuration metadata(学生申请名单,xml形式)

ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");

控制反转:将权利将给别人
控制(自己炒股)掌控权利
反转(把钱给别人炒股) 放权

依赖注入:一种具体实现行为
依赖(程序运行时需要外部资源为其提供数据)需求
注入(配置文件将数据注入到程序内部)行动

所以控制反转是一种思想(理论),依赖注入就是其具体的实现方式(实践)

当然,IoC 也可以通过其他的方式来实现,而 DI 只是 Spring 的选择

注解编程

写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:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd">

    <!--指定注解扫描包-->
    <context:component-scan base-package="com.zhang"/>
    <!--开启属性注解支持-->
    <context:annotation-config/>
</beans>

Component 表明这个类被Spring接管,注册到了容器中

为了更好的进行分层,Spring可以使用其它三个注解,功能一样,目前使用哪一个功能都一样。

  • @Controller:web层
  • @Service:service层
  • @Repository:dao层

@Autowired :对类成员变量、方法及构造函数进行标注,让 spring 完成 bean 自动装配的工作
@Qualifier 按照名称去装配 bean

<bean id="dog" class="zhang.pojo.Dog"/>
<bean id="dog2" class="zhang.pojo.Dog"/>

@Autowired					  //不能省略
@Qualifier(value = "dog")     //需要知道id
private Dog dog;

@Resource 根据byName的方式自动装配

@Resource(name = "dog2")  //没有了Autowired

<bean id="dog3" class="zhang.pojo.Dog"/>
<bean id="dog2" class="zhang.pojo.Dog"/>

一个类中要引用另一个类 如A引用B

@Component
public class B {}
@Component
public class Asd {
    @Autowired		//一定要加,注册到容器中
    public B b ;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值