栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Spring

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Spring

狂神说java-Spring笔记整理 1、Spring简介

历史:

Spring框架的雏形:interface21框架!

Spring框架以interface21为基础,重新设计,不断丰富其内涵

SSM:SpringMVC + Spring + Mybatis

Spring官网:https://spring.io/projects/spring-framework#overview

官方下载地址:https://repo.spring.io/release/org/springframework/spring/

GitHub:https://github.com/spring-projects/spring-framework

使用时导入依赖,spring-webmvc导入的依赖比较全


    org.springframework
    spring-webmvc
    5.2.0.RELEASE


    org.springframework
    spring-jdbc
    5.2.0.RELEASE

优点

  • Spring是一个开源的免费的框架
  • Spring是一个轻量级的(导入jar包后即可使用)、非入侵式(理解导入jar包后不影响以前的项目)的框架!
  • 控制反转(IOC),面向切面编程(AOP)!!!
  • 支持事务的处理,对框架整合的支持
  • 总结:Spring就是一个轻量级的控制反转(IOC)和面向切面编程(AOP)的框架

组成(待了解补充)
Spring Core为IOC容器

2、IOC理论推导(了解IOC原型) 2.1初始代码

1.UserDao接口

public interface UserDao {
    void getUser();
}

2.UserDaoImpl实现类

public class UserDaoImpl implements UserDao{
    public void getUser() {
        System.out.println("默认获取用户数据");
    }
}

3.UserService

public interface UserService {
    void getUser();
}

4.UserServiceImpl

public class UserServiceImpl implements UserService {
    UserDao userDao =new UserDaoImpl();
    public void getUser() {
        userDao.getUser();
    }
}

5.MyTest(测试)

public class UserServiceImpl implements UserService {
    UserDao userDao =new UserDaoImpl();
    public void getUser() {
        userDao.getUser();
    }
}

6.代码耦合性极强,如果dao层增加UserDao实现类,修改麻烦,适应不了用户变更。

2.2 IOC原型初步理解

初步了解IOC

1.解决上述问题:修改Service层实现类UserServiceImpl

public class UserServiceImpl implements UserService {
    private UserDao userDao;
	//set注入
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;
    }
    public void getUser() {
        userDao.getUser();
    }
}

2.MyTest(测试)

public class MyTest {
    public static void main(String[] args) {
        UserService userService = new UserServiceImpl();
        //通过set注入
        ((UserServiceImpl)userService).setUserDao(new UserDaoImpl());
        userService.getUser();
    }
}
  • 之前,程序是主动创建对象!控制权在程序猿手上!
  • 使用了set注入后,程序不再具有主动性,而是变成了被动的接收对象!
  • 这就是控制反转!!!!!!!!!!!!!!!!!(例如你在dao层增加实现类,只需用改动new UserDaoImpl(),解耦)系统的耦合性大大降低,这是IOC的原型!

3.IoC本质
控制反转IoC(Inversion of Control),是一种设计思想,DI(依赖注入)是实现IoC的一种方法,没有IoC的程序中,使用面向对象编程,对象的创建与对象间的依赖关系都在在程序中,有IoC后对象的创建由程序自己控制,控制反转后将对象的创建转移给第三方。(***我的理解***是IoC中利用配置文件创建对象,配置文件中依赖注入(即IOC容器中依赖注入),个人目前理解)

3.HelloSpring

1.新建一个maven项目,编写实体类pojo

public class Hello {
    private String str;
    public String getStr() {
        return str;
    }
    public void setStr(String str) {
        this.str = str;
    }
    @Override
    public String toString() {
        return "Hello{" +
                "str='" + str + ''' +
                '}';
    }
}

2.编写xml配置文件ApplicationContext.xml










    
        
    

3.MyTest(测试)

public class MyTest {
    public static void main(String[] args) {
        //获取Spring的上下文对象!
        ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
        //我们的对象现在都在Spring中的管理了,我们需要使用,直接去里面取出来就可以!
        Hello hello = (Hello) context.getBean("hello");
        System.out.println(hello);
    }
}

Hello对象是由Spring创建
Hello对象的属性是在Spring容器中注入。

控制反转:

  • 控制:谁来控制对象的创建,传统应用程序的对象是由程序本身控制创建的(例如我们在编写代码过程中是通过关键字new创建对象),使用Spring后,对象是由Spring来创建。
  • 反转:程序本身不创建对象,而变成被动的接收对象。

依赖注入:就是利用set方法来进行注入的。

IOC是一种编程思想,由主动的编程变成被动的接收。

上述程序中,我们彻底不用在程序中去改动了,要实现不同的操作,只需要在xml配置文件中进行修改,

***IOC:***对象由Spring来创建,管理,装配!

4、IOC创建对象的方式
  1. 使用无参构造创建对象,默认!
  2. 假设我们要使用有参构造创建对象。
  • 下标赋值




  • 类型(待补充)
  • 参数名(name,ref)(待补充)

总结:在配置文件加载的时候,容器中管理的对象就已经初始化了!

5、Spring配置 5.1、别名
    
5.2、Bean的配置

    

5.3、import

这个import。一般用于团队开发使用,它可以将多个配置文件,导入合并为一个。
假设,现在项目中有多个人开发,这三个人负责不同的类开发,不同的类需要注册在不同的bean中,我们可以利用import将所有人的beans.xml合并为一个总的!

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eD5biZy1-1634285389348)(E:markdownspringimage-20211009145811020.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2wHqebaG-1634285389350)(E:markdownspringimage-20211009145826335.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-epmeqmiC-1634285389352)(E:markdownspringimage-20211009145846240.png)]

6、依赖注入 6.1 构造器注入

(上述)

6.2 Set方式注入【重点】
  • 依赖注入:Set注入(文档1.4.1)

    • 依赖:bean对象的创建依赖于容器!

    • 注入:bean对象中的所有属性,由容器来注入!

【环境搭建】

1.复杂类型

package com.zhao.pojo;

public class Address {

        private String address;

        public String getAddress() {
            return address;
        }

        public void setAddress(String address) {
            this.address = address;
        }
}

2.真实测试对象

package com.zhao.pojo;

import java.util.*;

public class Student {
    private String name;
    private Address address;
    private String[] books;
    private List hobbies;
    private Map card;
    private Set games;
    private String wife;
    private Properties info;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Address getAddress() {
        return address;
    }

    public void setAddress(Address address) {
        this.address = address;
    }

    public String[] getBooks() {
        return books;
    }

    public void setBooks(String[] books) {
        this.books = books;
    }

    public List getHobbies() {
        return hobbies;
    }

    public void setHobbies(List hobbies) {
        this.hobbies = hobbies;
    }

    public Map getCard() {
        return card;
    }

    public void setCard(Map card) {
        this.card = card;
    }

    public Set getGames() {
        return games;
    }

    public void setGames(Set games) {
        this.games = games;
    }

    public String getWife() {
        return wife;
    }

    public void setWife(String wife) {
        this.wife = wife;
    }

    public Properties getInfo() {
        return info;
    }

    public void setInfo(Properties info) {
        this.info = info;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + ''' +
                ", address=" + address +
                ", books=" + Arrays.toString(books) +
                ", hobbies=" + hobbies +
                ", card=" + card +
                ", games=" + games +
                ", wife='" + wife + ''' +
                ", info=" + info +
                '}';
    }
}

3.beans.xml



    
        
    
    
        
        
        
        
        
        
            
                Java编程思想
                Java核心技术
                JVM虚拟机
                Spring内幕
            
        
        
        
            
                听歌
                看电影
                唱歌
            
        
        
        
            
                
                
            
        
        
        
            
                LOL
                COC
                BOB
            
        
        
        
            
        
        
        
            
                20223564
                zhao
            
        

    

4.测试类

import com.zhao.pojo.Student;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MyTest {
    public static void main(String[] args) {
        //获取上下文
        ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
        Student student = (Student) context.getBean("student");
        System.out.println(student);
    }
}
6.3 拓展方式注入

使用p命名空间(set注入)和c命名空间(构造器注入)进行注入

官方文档1.4.2XML Shortcut with the p-namespace ,XML Shortcut with the c-namespace

  • 需用导入规范
6.4 bean的作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sPhw8WmT-1634285389356)(E:markdownspringBeansscope.png)]单例模式singleton(Spring默认机制)

原型模式prototype:每次从容器中get的时候,都会产生一个新对象

(未完待续)
//获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext(“beans.xml”);
Student student = (Student) context.getBean(“student”);
System.out.println(student);
}
}

### 6.3 拓展方式注入

使用p命名空间(set注入)和c命名空间(构造器注入)进行注入

官方文档1.4.2XML Shortcut with the p-namespace  ,XML Shortcut with the c-namespace  

* 需用导入规范



### 6.4 bean的作用域

[外链图片转存中...(img-sPhw8WmT-1634285389356)]单例模式singleton(Spring默认机制)

原型模式prototype:每次从容器中get的时候,都会产生一个新对象

(未完待续)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/328523.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号