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

Spring笔记

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

Spring笔记

目录
  • 1. spring介绍
    • 1.1 相关网址
    • 1.2 一些依赖
    • 1.3 用到注解总结
    • 1.4 优点
    • 1.5 组成(了解即可)
    • 1.6 扩展(了解即可)
  • 2. IOC 大致理解(控制反转)(明白即可)
  • 3. 程序编写
    • 3.1 第一个spring程序
    • 3.2 把最开始程序修改成spring
  • 4. IOC创建对象的方式
    • 4.1 使用无参构造方法创建对象,默认!
    • 4.2 假设我们要使用有参构造创建对象
      • 4.2.1 使用下标传递参数
      • 4.2.2 使用类型传递参数(不建议使用)
      • 4.2.3 使用name传递参数(该方法基本够用)
  • 5. Spring配置
    • 5.1 别名
    • 5.2 Bean的配置
    • 5.3 import
  • 6. 依赖注入
    • 6.1 构造器注入
    • 6.2 Set方式注入(重要)
    • 6.3 其他方式(不是重点,会用即可)
    • 6.4 Bean的作用域
      • 6.4.1 单例模式(默认)(singletion )
      • 6.4.2 原型模式(prototype )
  • 7. Bean的自动装配()
    • 7.1 测试
    • 7.1 手动装配
    • 7.2 byName 和 byType 自动装配
    • 7.3 使用注解实现自动装配
  • 8. 使用注解开发
    • 8.1 bean
    • 8.2 属性注入
    • 8.3 衍生的注解
    • 8.4 自动装配置(看7.3)
    • 8.5 作用域
    • 8.6 小结
  • 9. 使用Java的方式配置Spring(在后续SpringBoot中随处可见,重要)

1. spring介绍 1.1 相关网址

官网: https://spring.io/projects/spring-framework#overview.
官方下载地址: https://repo.spring.io/ui/native/release/org/springframework/spring.
GitHub: https://github.com/spring-projects/spring-framework.

1.2 一些依赖

    org.springframework
    spring-webmvc
    5.3.12


    org.springframework
    spring-jdbc
    5.3.12

1.3 用到注解总结
注解解释在本文中位置
@Autowired【自动装配】通过类型byType,如果不能唯一装配,需配合@Qualifier(value = “”)使用7.4
@Qualifier与@Autowired配合使用7.4
@Resource【自动装配】通过名字,类型7.4
@Nullable字段标记该注解,说明这个字段可以为null
@Component组件,放在类上,说明这个类被Spring管理了,就是bean!
等价于.xml文件中的
8.1
@Value("")该注解可以放到set方法上,也可以放到属性上
等价于
8.2
@Repository在Dao层,代表将某个类注册到Spring中,装配Bean8.3
@Service在service 层,代表将某个类注册到Spring中,装配Bean8.3
@Controller在controller 层,代表将某个类注册到Spring中,装配Bean8.3
@Scope(value="")指定类的作用域8.5
@Configuration让该类变成一个配置类,和之前的applicationContext.xml文件用途一样9
@Bean在配置类中的方法上使用,注册一个bean,就相当于我们之前写的一个bean标签
这个方法的名字就相当于bean标签的id属性
这个方法的返回值就相当于bean标签的class属性
9
@import()等价于之前xml文件的标签9
@ComponentScan("")等价于之前xml文件的标签9
1.4 优点

· Spring是一个开源的免费的框架(容器)!
· Spring是一个轻量级的、非入侵式的框架!
· 控制反转(IOC),面向切面编程(AOP)!
· 支持事务的处理,对框架整合的支持!
总结: Spring就是一个轻量级的控制反转((IOC)和面向切面编程(AOP)的框架!

1.5 组成(了解即可)

1.6 扩展(了解即可)


. Spring Boot
  一个快速开发的脚手架。
  基于SpringBoot可以快速的开发单个微服务。。约定大于配置!
. Spring Cloud
  SpringCloud是基于SpringBoot实现的。
Spring弊端: 发展了太久之后,违背了原来的理念!配置十分繁琐,人称:“配置地狱!"

2. IOC 大致理解(控制反转)(明白即可)

之前,程序是主动创建对象!控制权在程序员手上!
使用了set注入后,程序不再具有主动性,而是变成了被动的接受对象!

举例:
在服务层(service)中,使用set方法动态注入,实际需要使用的类又用户指定。

用户使用的时候,使用哪个传哪个就行了,从而实现了解耦。

3. 程序编写 3.1 第一个spring程序

1.在resources资源文件夹下创建托管对象的.xml文件
注意: 该.xml文件,这里先命名为beans.xml了,官方建议命名为:applicationContext.xml。




    
    
        
    

2.使用的方法:
创建这个ClassPathXmlApplicationContext(“beans.xml”);实力的时候,参数可以是多个。

//获取spring的上下文对象
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 我们的对象都在spring中管理了,我们如果使用,直接去里面取出即可
Object hello = (Hello)context.getBean("hello");
// 这里可以不使用强制类型转换,参数第二个参数加上类名就行了
// Student student = context.getBean("student", Student.class);
System.out.println(hello.toString());

我们彻底不需要在程序中去改动了,要实现不同的操作,只 需要在xml配置文件见中进行修改。所谓IOC,就是:对象由Spring来创建,管理,装配!

3.2 把最开始程序修改成spring


使用:

4. IOC创建对象的方式 4.1 使用无参构造方法创建对象,默认!

如果该类没有无参的构造方法则会报错

4.2 假设我们要使用有参构造创建对象 4.2.1 使用下标传递参数

    

4.2.2 使用类型传递参数(不建议使用)

(不建议使用,因为有可能两个变量类型一样)


    

4.2.3 使用name传递参数(该方法基本够用)

	

5. Spring配置 5.1 别名

取别名之后,相当于多了个名字,之前的名字和别名都可以用

	
    
5.2 Bean的配置

id:bean的唯一标识符,相当于对象名。
calss: bean对象对应的全限定名:报名+类名。
name: 也是别名,而且可以取多个别名,用 空格、逗号、分号 来分隔。

 
     
 
5.3 import

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

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

第四部分已经说过了。
扩展:
c命名空间的方式:(用法见注释)



    
    

    
    
        
        
        
    

    
    

6.2 Set方式注入(重要)

依赖注入:Set注入!
 依赖: bean对象的创建依赖于容器!
 注入: bean对象中的所有属性,由容器来注入!
1.环境搭建:
两个类:

其中学生类中有下列属性:

2.开始注入数据:


    



    
    
    
    
    
    
        
            红楼梦
            西游记
            水浒传
            三国演义
        
    
    
    
        
            听歌
            写代码
        
    
    
    
        
            
            
        
    
    
    
        
            LOL
            CF
        
    
    
    
        
    
    
    
        
            110110110
            
            root
        
    

扩展:
p命名空间注入:(用法见注释)



    
        
    
	
    

6.3 其他方式(不是重点,会用即可)

我们可以使用p命名空间和c命名空间进行注入(在6.1和6.2的扩展部分有用法介绍)
再次总结:



    
    

    
    
        
    
    
        

注意:
p命名空间 和 c命名空间 不能直接使用,要先导入约束。

6.4 Bean的作用域

理解为主

Scope描述
singletion(默认)为每个Spring IOC容器将单个bean定义的范围限定为单个对象实例。
prototype将单个bean定义的范围限定为任意数量的对象实例。
request将单个bean定义限定为单个HTTP请求的生命周期。也就是说,每个HTTP请求都有自己的bean实例,该实例是在单个bean定义的后面创建的。仅在支持web的Spring ApplicationContext有效。
session将单个bean定义限定为HTTP Session的生命周期在这里插入代码片。仅在支持web的Spring ApplicationContext 有效。
application将单个bean定义限定到ServletContext的生命周期。仅在支持web的Spring ApplicationContext
websocket将单个bean定义的范围限定到WebSocket的生命周期。仅在支持web的Spring ApplicationContext的上下文中有效。
6.4.1 单例模式(默认)(singletion )

每次从容器中get的时候,都会得到同一个对象!


6.4.2 原型模式(prototype )

每次从容器中get的时候,都会产生一个新对象!


其他的只在web开发中才能用到!

7. Bean的自动装配()

自动装配是Spring满足bean依赖一种方式!
Spring会在上下文中自动寻找,并自动给bean装配属性!

在Spring中有三种装配的方式:
 1.在xmI中显示的配置
 2.在java中显示配置
 3.隐式的自动装配bean [重要]

7.1 测试

一个人People,有两个宠物:Dog,Cat;

7.1 手动装配

7.2 byName 和 byType 自动装配

接下来使用自动装配(添加autowire="")
byName: 会自动在容器上下文中查找,和自己对象set方法后面的值对应的bean id!
byType: 会自动在容器上下文中查找,和自己对象属性类型相同的bean!(坏处:有相同类型的会报错,好处:子对象可以不加id)

小结:
byName 的时候,需要保证所有bean的id唯一, 并且这个bean需要和自动注入的属性的set方法的值一致!
byType 的时候,需要保证所有bean的class唯一, 并且这个bean需要和自动注入的属性的类型一致!

7.3 使用注解实现自动装配

要使用注解须知:(第四、七、八、十行是新增)(重要)
 1.导入约束 context约束
 2.配置注解的支持




    


1.应用到自己程序:(四个箭头是新增,后面的bean写的时候很简约)

2.1在Java中使用注解(这个类中的set方法也可以省略了,注解利用放射都帮忙做了)

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解[@Autowired] 完成的时候、我们可以使用 @Qualifier(value=“xx”) 去配置@Autowired的使用,指定一个唯一的bean对象注入!
2.2 使用 @Resource 注解,先使用byName查找,再通过byType查找,可以指定name去指定一个唯一的bean对象注入。功能强大,但是性能稍低。(不常用)

小结:
@Resource和@ Autowired的区别:
● 都是用来自动装配的,都可以放在属性字段上
● @ Autowired通过byType的方式实现,而且必须要求这个对象存在!(常用)
● @Resource默认通过byName的方式实现,如果找不到名字,则通过byType实现!如果都找不到的情况下就报错!
● 执行顺序不同: @ Autowired通过byType的方式实现

8. 使用注解开发

在Spring4之后,要使用注解开发,必须要保证aop的包导入了。(webmvc依赖已经包含了aop)

8.1 bean

先写入配置文件
添加这一句,指定要扫描的包,这个包下的注解就会生效:

 
 



    
    
    


8.2 属性注入
// @Component注解等价于:xml文件中的
@Component
public class User {
    public String name ;
    
    @Value("辉哥")    // 该注解可以放到set方法上,也可以放到属性上,等价于 
    public void setName(String name) {
        this.name = name;
    }
}
8.3 衍生的注解

@Component有几个衍生注解,我们在web开发中,会按照mvc三层架构分层!

  • dao [@Repository]
  • service [ @Service]
  • controller [@Controller]

这四个注解功能都是一样的,都是代表将某个类注册到Spring中,装配Bean

8.4 自动装配置(看7.3)

在7.3中已经提到了
@Resource和@ Autowired:

8.5 作用域

@Scope(value="")

8.6 小结

xml与注解:

  • xml 更加万能,适合任何场合!维护简单方便
  • 注解 不是自己的类使用不了,维护相对复杂!

xml与注解最佳实践:

  • xml用来管理bean;
  • 注解只负责完成属性的注入;
  • 我们在使用的过程中,只需要注意一个问题:必须让注解生效,就需要开启注解的支持;
9. 使用Java的方式配置Spring(在后续SpringBoot中随处可见,重要)

完全不适用Spring的xml配置了,全权交给Java来做!
JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功能!
官网实例如下:

@Configuration
public class AppConfig {
    @Bean
    public MyService myService() {
        return new MyServiceImpl();
    }
}
// 使用的时候使用如下句子
ApplicationContext context = new AnnotationConfigApplicationContext(AppConfig.class);

自己写的部分:
实体类:

import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component //这个注解就是说这个类被Spring管了,注册到了容器中(不加好像也能运行)
public class User {
    @Value("辉哥")
    private String name;
    
    public String getName() {return name; }
    public void setName(String name) {this.name = name; }

    @Override
    public String toString() {return "User{name='" + name + ''' + '}';}
}

配置类:

import com.hui.pojo.User;
import org.springframework.context.annotation.*;

// @Configuration这个也会被Spring容器托管,注册到容器中,因为他本来就是一个@Component
// @Configuration代表这是一个配置类,和之前的applicationContext.xml文件用途一样
// 所以也有很多注解,跟之前的xml配置文件有对应,所以也有扫描、导入等注解,如下:
@Configuration
@ComponentScan("com.hui")
@import(HuiConfig2.class)
public class HuiConfig {
    // 注册一个bean,就相当于我们之前写的一个bean标签
    // 这个方法的名字就相当于bean标签的id属性
    // 这个方法的返回值就相当于bean标签的class属性
    @Bean
    public User getUser(){
        return new User(); // 就是返回要注入到bean的对象
    }
}

测试类:

// 如果完全使用了配置类方式去做,我们就只能通过AnnotationConfig 上下文来获取容器,通过配置类的class对象加载!
ApplicationContext context = new AnnotationConfigApplicationContext(HuiConfig.class);
User user = context.getBean("getUser",User.class);
System.out.println(user);
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439337.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

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

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