千家信息网

Spring[01.基础知识整理(上)]

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,概念IOC(Inversion of Control)其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是
千家信息网最后更新 2026年11月03日Spring[01.基础知识整理(上)]

概念

IOC(Inversion of Control)

其思想是反转资源获取的方向. 传统的资源查找方式要求组件向容器发起请求查找资源. 作为回应, 容器适时的返回资源. 而应用了 IOC 之后, 则是容器主动地将资源推送给它所管理的组件, 组件所要做的仅是选择一种合适的方式来接受资源. 这种行为也被称为查找的被动形式

DI(Dependency Injection) - IOC 的另一种表述方式

即组件以一些预先定义好的方式(例如: setter 方法)接受来自如容器的资源注入. 相对于 IOC 而言,这种表述更直接

通过反射机制配置Bean

注入的方式

  • 构造函数方式 (类中需要带参数的构造函数)
    
  • 属性方式 (类中需要无参数的构造函数)

abstract属性为true的时候,IOC容器不会实例化对象,如果value属性含有特殊字符,需要使用包裹起来

集合

  • 属性为list集合
                                                            
  • 属性为props
                administrator@example.org        support@example.org        development@example.org    
  • 属性为map
                              
  • 属性为set
                 just some string            

通过工厂方法配置Bean

静态工厂方法

Factory类本身不需要实例化,这个Factory类中提供了1个静态方法来生成bean对象

public class StaticAddressFactory {    private static Map addressMap = new HashMap() ;    static {        addressMap.put("JINAN", new Address("JINAN", "SHILIHE"));        addressMap.put("QINGDAO", new Address("QINGDAO", "SIFANG"));    }    public static Address getAddress(String name){        return addressMap.get(name);    }}

实例工厂方法

Factory类本身需要实例化

public class SigletonAddressFactory {    public Map getAddressMap() {        return addressMap;    }    public void setAddressMap(Map addressMap) {        this.addressMap = addressMap;    }    private  Map addressMap = new HashMap() ;    public Address getAddress(String name){        return this.addressMap.get(name);    }}

Factory Bean模式配置Bean

Factory Bean模式

比工厂方法模式更常见,Factory Bean工厂类必须实现spring提供的FactoryBean的接口

重写以下三个方法:

  • getObject()
    这个就是你想利用工厂类生产的bean对象, 通常在里面new 1个 对象就ok
  • getObjectType()
    你必须指明上面bean的对象的class
  • isSingleton
    这个方法决定了这个bean是否单例的

案例

public class MyAddressFactory implements FactoryBean
{ private String city; private String street; public String getCity() { return city; } public void setCity(String city) { this.city = city; } public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } @Override public Address getObject() throws Exception { return new Address(this.city, this.street); } @Override public Class getObjectType() { return Address.class; } @Override public boolean isSingleton() { return false; }}

通过FactoryBean方式,从IOC容器里面bean,通过FactoryBean的getObject返回指定的bean,property: MyAddressFactory的属性设置

通过注解方式注入Bean

  • 组件扫描(component scanning): Spring 能够从 classpath 下自动扫描, 侦测和实例化具有特定注解的组件.
  • 特定组件包括:
    @Component: 基本注解, 标识了一个受 Spring 管理的组件
    @Respository: 标识持久层组件
    @Service: 标识服务层(业务层)组件
    @Controller: 标识表现层组件
  • 对于扫描到的组件, Spring 有默认的命名策略: 使用非限定类名, 第一个字母小写. 也可以在注解中通过 value 属性值标识组件的名称

  • 在组件类上使用了特定的注解之后, 还需要在 Spring 的配置文件中声明 :
    base-package 属性指定一个需要扫描的基类包,Spring 容器将会扫描这个基类包里及其子包中的所有类.
    当需要扫描多个包时, 可以使用逗号分隔.

    • 如果仅希望扫描特定的类而非基包下的所有类,可使用 resource-pattern 属性过滤特定的类

    • 子节点表示要包含的目标类
    • 子节点表示要排除在外的目标类
    • 下可以拥有若干个 和 子节点

Scope("prototype")

当bean增加注解@Scope("prototype"),那么就是获得的多实例的bean

命名策略

对于扫描到的组件, Spring 有默认的命名策略:

  • 使用非限定类名, 第一个字母小写.
  • 也可以在注解中通过 value 属性值标识组件的名称
                        

bean的作用域

singleton

单例模式

prototype

每次取出的bean对象都需要实例化

组件 属性 方式 方法 实例 容器 注解 资源 对象 工厂 标识 模式 配置 函数 策略 节点 参数 名称 字母 小写 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 互联网科技公司 中国互联网科技工作委员会毛军 高科技与互联网 致骋互联网科技 友谊互联网络科技 润盈互联网科技 长亮科技互联网金融 中国最先进互联网科技公司 互联网系的金融科技公司 民营互联网公司国防科技 众安科技工业互联网合作 上海京穆互联网科技有限公司 广东工业互联网大赛深圳学泰科技 易企秀互联网科技是做什么的 新氧科技和美国互联网有关系吗 云鲸互联网络科技有限公司 互联网科技新闻 互联网公司属于科技吗 科技信息时代互联网发展 杭州科技互联网公司有哪些 工业互联网科技新基建 银优互联网科技有限公司 互联网科技缩写 衡水科技产业互联网平台 现代科技和互联网有关系吗 民营互联网公司国防科技 无锡工业互联网科技有限公司 2021互联网科技公司排名 下一代互联网重大应用科技园 唐山双旺合互联网科技产业园
0