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 - (1) -> 正文阅读

[Java知识库]笑着学Spring - (1)

前言

?ladies and gentleman?,?大家好 ,我是羡羡 ,今天开始介绍spring的知识

?学spring一定要笑着学, 笑着学😂, 嘿嘿 ,我学 **?👿

?

? ?好了 ,我们来正式介绍 spring , 学的时候一定要记得笑着学

目录

??Spring是什么?

👑搭建你的第一个Spring实例

🎃IOC(控制反转)

🥼注解


Spring是什么?

? ? ? ? Spring 是于 2003 年兴起的一个轻量级的,非侵入式的,IOC 和 AOP 的 Java 一站式开发框架,它是为了简化企业级应用开发而生的。
这里我们简单介绍一下这几个词
轻量级
Spring 框架使用的 jar 都比较小,一般在 1M 以下或者几百 kb。Spring核心功能的所需的 jar 总共在 3M 左右。 Spring 框架运行占用的资源少,运行效率高
非侵入式
编写一些业务类的时候不需要继承 spring 特定的类,通过配置完成依赖注入后就可以使用,此时,spring 就没有侵入到我业务类的代码里
IOC(控制反转)
即 Inversion of Control,缩写为 IOC,就是由 Spring IoC 容器管理对象,而非传统实现中由程序代码直接操控.
AOP(面向切面)
Aspect Oriented Programming , 通过 Spring 提供的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付在 Spring 中,开发人员可以从繁杂的事务管理代码中解脱出来,通过声明式方式灵活地进行事务的管理,提高开发效率和质量.
一站式
Spring 本身也提供了数据访问功能和 web 功能,以及可以很好的管理其他框架.

搭建你的第一个Spring实例

首先第一步, 在maven中导入spring的核心jar
<!-- spring-context --> 
<dependency> 
   <groupId>org.springframework</groupId>
   <artifactId>spring-context</artifactId> 
   <version>5.2.2.RELEASE</version> 
</dependency>

可以在maven里看到 spring 核心包的jar依赖关系

写一个User类

public class User {
   
    public User(){System.out.println("无参构造");}
}

在resources目录下新建 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"
       xmlns:aop="http://www.springframework.org/schema/aop"
      
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        https://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!--配置我们需要让spring管理的类 , 创建对象-->
    <!--由spring创建的对象我们称为一个bean-->
    <!--id : 生成对象的标识, class : 全类名-->
    <bean id="user" class="com.ff.spring.bean.User">
 
    </bean> 
</beans>
//ApplicationContext是spring底层的一个接口,定义了一些规范,负责实例化,配置,组装bean
//ClassPathXmlApplicationContext是一个具体的实现类,创建并管理对象
ApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");
User user=app.getBean("user",User.class);
System.out.println(user)

IOC(控制反转)

读作 “反转控制”(Inverse of Control) 更好理解,不是什么技术,而是一种 设计思想 ,就是 将原本在程序中手动创建对象的控制权,交由 Spring 框架来 管理。
正控:若要使用某个对象,需要自己去负责对象的创建
反控:若要使用某个对象,只需要从 Spring 容器中获取需要使用的对象,不关心对象的创建过程,也就是把创建对象的控制权反转给了 Spring 框架 .
? ? ? ? 这样做有什么好处呢?
? ? ?IOC 容器是具有依赖注入功能的容器 , 负责对象的一系列操作, 我们把创建对象的控制权交给spring , 当我们需要的时候直接去容器获取, 不需要考虑类与类之间的依赖, 降低了耦合度
底层实现方式: 解析 xml/扫描注解标签 + 工厂模式 + 反射机制
Spring Bean 管理 ( 基于 xml 配置方式)
我们在dao层先定义方法
public class UserDao {
    public void saveUser(){
        System.out.println("保存");
    }
}

service层 :?

public class UserService {
    private UserDao userDao;
    public void save(){
        userDao.saveUser();
    }

    public UserDao getUserDao() {
        return userDao;
    }

    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
}

在 spring.xml文件中配置依赖关系

<bean id="userDao" class="com.ff.spring.dao.UserDao"/>
    <bean id="userService" class="com.ff.spring.Service.UserService">
        <!--ref代表引用的类-->
        <property name="userDao" ref="userDao"/>
    </bean>
ApplicationContext app = new ClassPathXmlApplicationContext("spring.xml");

UserService userService=app.getBean("userService",UserService.class);

userService.save();

通过上述代码可以看出 , userDao 依赖于 userService , 我们需要去配置这个依赖关系

Xml 配置方式依赖注入【DI:Dependency Injection】
? ?就是说, 我们可以在创建对象的同时,直接为属性注入值
这里有两种方式 :?
1. 通过构造方法? 2. 通过set方法
public class User {
    private Integer num;
    private String account;
    private String password;
    private List<Integer> list;
    public User() {
        System.out.println("无参");
    }

    public User(Integer num, String account, String password) {
        this.num = num;
        this.account = account;
        this.password = password;
    }

    public List<Integer> getList() {
        return list;
    }

    public void setList(List<Integer> list) {
        this.list = list;
    }

    public Integer getNum() {
        return num;
    }

    public void setNum(Integer num) {
        this.num = num;
    }

    public String getAccount() {
        return account;
    }

    public void setAccount(String account) {
        System.out.println("vfdsv");
        this.account = account;
}

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
    
}

完善上面的 User 类

<!--通过构造方法注入-->
    <bean id="user1" class="com.ff.spring.model.User">
        <constructor-arg name="account" value="张三"/>
        <constructor-arg name="password" value="123"/>
        <constructor-arg name="num" value="1"/>
    </bean>
    <!--通过set方法注入-->
    <bean id="user2" class="com.ff.spring.model.User">
        <property name="account" value="jim"/>
        <property name="password" value="789"/>
        <property name="num" value="1"/>
        <property name="list">
            <list>
                <value>1</value>
                <value>2</value>
                <value>3</value>
            </list>
        </property>
    </bean>

注入的两种方式如上

我们说框架的存在就是为了简化开发,那这样一直配置不也很麻烦吗?

所以这里我们引入注解注入的方式

注解

在spring.xml中开启注解扫描
<context:component-scan base-package="包名"> </context:component-scan>
注解创建对象
@Component(value=“user”) 等于? <bean id=“user” class=“”></bean>
@Service? ?//逻辑处理层
@Repository? //数据访问层
@Autowired
@Autowired 是 Spring 提供的注解,可以写在字段和 setter 方法上。如果写在 字段上,那么就不需要再写 setter 方法。默认情况下它要求依赖对象必须存在, 如果允许 null 值,可以设置它required 属性为 false。
例如 :?

?我们可以这样, 直接将这个属性注入进来

但是需要注意, 我们上述注入的时候 , BookService类上需要加@Service , BookDao类需要加@Repository , 加注解表明交给spring管理,不加则扫描不到依赖关系

byType 自动注入
该注解默认使用按类型自动装配 Bean 的方式。
可以通过类型注入, 也可以通过name注入
byName 自动注入
如果我们想使用按照名称(byName)来装配,可以结合@Qualifier 注解一起使用。
需要在引用属性上联合使用注解@Autowired 与@Qualifier。@Qualifier 的
value 属性用于指定要匹配的 Bean 的 id 值。
JDK 注解@Resource 自动注入
S pring 提供了对 jdk 中@Resource 注解的支持。@Resource 注解既可以按名称匹配 Bean,也可以按类型匹配 Bean。默认按照 ByName 自动注入

结语

?关于spring今天就先谈到这里, 后面再来介绍AOP和事务管理这些内容,谢谢阅读😊

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:57:15  更:2022-04-04 11:57:24 
 
开发: 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/24 8:04:41-

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