IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> Spring -> 正文阅读

[Java知识库]Spring

目录

一、Spring是什么?

二、Spring 的主要功能(两大核心IOC和AOP)

1、IOC:? Inversion Of? Control,控制反转

??①举例说明

? ②为什么这么做?

? ③IOC 容器

2、DI:依赖注入

3、AOP:


一、Spring是什么?

? ? ? ? Spring 是面向分层的 Java 一站式轻量级开发源框架,优势是任意分层可以使用任何组件。整合资源,优秀的可插拔性。

? ? ? ? 官网:Spring | Home? ? ??

?

二、Spring 的主要功能(两大核心IOC和AOP)

1、IOC:? Inversion Of? Control,控制反转

? ? ?将设计好的对象交给容器管理,而不是传统的在对象内部直接控制。IOC 是由一个专门的容器来管理这些对象,既 由IOC 容器控制对象的创建,解决耦合问题。

??①举例说明

//创建对象
public class UserService {
    private IUserDao userDao = new UserDao();//多态:父类型引用指向子类型

    public void save(User user) {
        userDao.save(user);
    }
}

public class Test {
    public static void main(String[] agrs) {
        UserService userService = new UserService();
        userService.save(user);
    }
}


//反转:
public class UserService {
    private IUserDao userDao;//多态,不实例化

    public void save(User user) {
        userDao.save(user);
    }

    //使用Setter来设置userDao
    public void setUserDao(IUserDao userDao) {
        this.userDao = userDao;
    }
}

public class Test {
    public static void main(String[] agrs) {
        UserService userService = new UserService();
        userService.setUserDao(new UserDao());//多了这一行
        userService.save(user);
    }
}

? ? ?Dao 本应该在 Service 内部创建及维护。控制反转是应用(Service)本身不负责依赖对象(Dao)的创建及维护,依赖对象的创建是由外部容器(Test)负责的。这样控制权就由应用内部转移到了应用外部容器(依赖倒置)。

? ②为什么这么做?

? ? ? ? 做了反转就有了无数种可能。不做反转有且只有一种可能。

? ③IOC 容器

? ? ? ? ?IOC 容器:依赖对象的创建及维护是由外部容器负责的,这里就是指 IOC 容器。

? ? ? ? ?所有的对象都要盛装载 IOC 容器中,由 IOC 容器统一调度和分发。这就实现了优秀的插拔能力(高内聚,低耦合)。

耦合:模块之间的依赖关系,模块间联系越多,其耦合性越强,独立性越差。

内聚:模块之间的独立性越强内聚程度越高

? ? ? ??

2、DI:依赖注入

????????由容器动态的将某个依赖注入到组件中,从而提高组件重用的频率。
????????核心:把依赖交给容器,容器帮你管理依赖。

3、AOP:

面向切面编程(AOP):运行期动态实现在不修改源代码的情况下给程序添加功能。对目标功能进行扩展或者是增强,让主业务方法变得简单和单纯。

代理:是一种设计模式,提供了对目标对象另外的访问方式:通过代理访问目标对象
?? ??? ?静态代理:继承父类或者实现接口
?? ??? ??? ?在编译阶段就已经存在的代理。它需要实现与目标对象一样的接口。
?? ??? ??? ?优点:可以做到在不修改源代码的情况下,对目标对象功能扩展。
?? ??? ??? ?缺点:
?? ??? ??? ??? ?因为代理对象需要与目标对象实现一样的接口,所以代理类较多
?? ??? ??? ??? ?一旦接口增加方法,目标对象与代理对象都要维护。
?? ??? ?动态代理:在编译阶段不存在,运行时才动态生成的代理。
?? ??? ??? ?jdk 动态代理:为接口生成子类,子类和父类之间是接口实现关系,自动调用?? ?
?? ??? ??? ?cglib 动态代理(子类代理):为类生成子类,子类和父类之间是继承关系会自动使用 cglib
?? ??? ??? ?区别:
?? ??? ??? ??? ?jdk 代理对使用动态动态代理的类必须实现一个或多个接口;CGlib是针对类实现代理,对指定的类生成一个子类,并覆盖其中的方法,这种通过继承类的实现方式,不能代理 final 修饰的类。
?? ??? ?
二、常用注释
向容器中注入:
@Repository:?? ?用于向 IOC 容器中放入持久层
@Service:?? ??? ?用于向 IOC 容器中放入业务层
@Controller:?? ?用于向 IOC 容器中放入控制层
@Component:?? ?用于向 IOC 容器中放入组件(任何类型)
从容器中取出:
@Autowire:?? ?ByType自动从容器中按照类型查找匹配的 Bean,并执行 DI(无需Setter,使用反射完成)
@Resource(name="名称"):ByName按名称取出,用于资源文件(最好不用)
@Qualifier("名称"):按名称取出,(必须和 @AutoWire 同时存在)等价于 byname
@Value:用于解析 properties

3、Spring 依赖注入方式:
1、set 方法注入
2、构造器注入
3、静态工厂的方法注入
4、实例工厂的方法注入

4、set 跟构造器注入的区别:
构造器注入保证所有的注入都被初始化,但是 setter 注入提供更好的灵活性来设置可选依赖。
如果使用 xml 来描述依赖,Setter 注入的可读写会更强。
强制依赖使用构造器注入,可选依赖使用 setter 注入。

?? ?

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-05-26 15:14:28  更:2022-05-26 15:16:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 20:44:32-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码