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

spring

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

spring

1:简介:

spring:春天 -----》给软件行业带来了春天2002,首次推出了spring框架的雏形:interface21框架2004年3月21日发布Rod Johnsonspring理念:使现有的技术更加容易使用,本身是一个大杂烩,整合了现有的技术框架

SSH:Struct2 + spring + Hiberbate!SSM:springMVC + spring + Mybatis

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

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

guihub地址:https://github.com/spring-projects/spring-framework

1.2:优点

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

1.4:拓展

现代化的java开发!基于spring的开发

springboot

一个快速开发的脚手架基于springboot可以快速的开发单个微服务约定大于配置springcloudspringcloud是基于springboot实现的

现在大多数公司都在使用springboot进行快速开发,学习springboot的前提:需要完全掌握spring和springMVC!承上启下的作用!

弊端:发展太久之后就违背了原来的理念!配置十分烦琐。

2:IOC理论推导
    userDao接口userDaoImpl实现类userService业务接口userServiceImpl业务实现类

原本:用户的需求会导致业务层的及数据层的代码大量变动程序注定创建对 象,控制权在程序员身上

现在:使用一个set接口实现:使用set注入,程序不再具有主动性,而是变成了被动的接收对象

private UserDao  userDao;

//利用set进行动态是实现值的注入!
public void setUserDao(UserDao userDao) {
	this.userDao = userDao;
}

这种思想从本质上解决了问题,我们程序员不用再去管理对象的创建。系统的耦合性减低,可以更加专注于业务的实现!这是IOC的原型!

IOC本质

在面向对象编程中,对象的创建与对象间的依赖关系完全硬编码在程序中,对象的创建由程序自己控制。

控制反转后将对象的创建移给第三方,所谓的控制反转就是:获取依赖对象的方式反转了

3:helloSpring

bean文件配置骨架





4:IOC创建对象的方式

    使用无参构造方法创建对象 默认!

    使用有参构造方法

      下标赋值

          
             
          
      

      类型

              
                 
              
      

      参数名

          
              
          
      

总结:在配置文件加载的时候,容器中管理的对象已经被创建了!

5:spring配置 5.1:别名:
    
5.2:bean的配置
    
        
        
    
5.3:import

一般用于团队合作,可以将多个配置文件导入合并为一个

6:DI依赖注入 6.1构造器注入 6.2:set方式注入【重点】

依赖注入:set注入

依赖:bean对象的创建依赖于容器注入:bean对象的属性,有容器来注入

【环境搭建】

    复杂类型

    public class Address {
        private String address;
    
        public String getAddress() {
            return address;
        }
    
        public void setAddress(String address) {
            this.address = address;
        }
    
        @Override
        public String toString() {
            return "Address{" +
                    "address='" + address + ''' +
                    '}';
        }
    }
    

    真实测试对象

    public class Student {
    
        private String name;
        private Address address;
        private String[] book;
        private List hobby;
        private Map card;
       private Set game;
       private String wife;
       private Properties info;
       }
    

    bean.xml

    
    
    
        
            
        
    
    

    测试类

6.3:拓展方式注入

我们可以使用p命令空间和c命令空间注入





    

    
    

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

   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:c="http://www.springframework.org/schema/c"
6.4:bean的作用域

    单例模式(spring默认模式)

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

    
    
7:bean的自动装配

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

在spring中有三种装配方式

    在xml中显示配置在java中显示配置隐式的自动装配bean
7.1:测试
    搭建环境

    一个人有两个宠物

7.2:自动装配 byname、bytype自动装配:
    
    
    

    
        
    

小结:

byname:需要保证所有bean的id唯一,并且这个bean需要和自动注入的属性的set方法值一致bytype:需要保证所有bean的class唯一,并且这个bean需要和自动注入的属性的类型一致! 7.4:使用注解实现自动装配

jdk1.5支持的注解,spring2.5就支持注解

The introduction of annotation-based configuration raised the question of whether this approach is “better” than XML.

要是用注解须知:

    导入约束 context约束

    配置注解的支持 context:annotation-config/ 【重点】



    


@Autowired

直接在属性上使用即可!也可以在set方式上使用!

使用autowired我们可以不用编写set方法,前提是你这个自动装配的属性在IOC(spring)容器中存在,且符合名字byname!

科普:

@Nullable  字段标记了这个注解,说明这个字段可以为null
public @interface Autowired {
    boolean required() default true;
}

如果@Autowired自动装配的环境比较复杂,自动装配无法通过一个注解@Autowired完成时,我们可以使用@Qualifier(value = “xxx”)去配置@Autowired的使用

@Autowired
@Qualifier(value = "dog1")
private Dog dog;

@Resource注解

小结:

@Resource与@Autowired的区别:

都是用来自动装配的,都可以放在属性字段上@Autowired通过byType的方式实现,而且必须要求这个对象存在!@Resource默认通过byname的方式实现,如果找不到名字,则通过byType实现,如果两个都找不到的情况下,就报错!【常用】执行顺序不同 8:使用注解开发

在spring4之后要是用注解开发必须保证aop的包导入了

使用注解需要导入context约束,增加注解的支持




	


    bean

    属性如何注入

    @Component
    public class User {
        public String name;
    
        //@Value("chenyuxing")《==》
        @Value("chenyuxing")
        public void setName(String name) {
            this.name = name;
        }
    }
    

    衍生的注解

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

    dao——【@Repository】

    service——【@Service】

    controller——【@Controller】

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

    自动装配置

    @Autowired:自动装配通过类型、名字
    	如果Autowired不能唯一自动装配,则需要通过@Qualifier(value=“xxx”)
    @nullable 标记字段可以为null
    @Resource 自动装配通过名字、类型
    

    作用域

    @Scope("singleton")
    

    小结

    xml与注解:

    xml更万能,适用于任何场合注解不是自己类使用不了,维护相对复杂、

    最佳实践:

    xml用来管理bean

    注解只负责完成属性注入

    使用过程中,只需要注意一个问题:必须让注解生效,就必须注解的支持

        
        
    
9:使用java的方式配置spring

我们现在要完全不适用spring的xml配置,全权交给java

javaConfig是spring的一个子项目,在spring4之后它成为了一个核心功能

10:代理模式

为什么要学习代理模式?因为这就是spring aop的底层【springaop、springmvc】

代理模式分类:

静态代理动态代理 10.1:静态代理

角色分析:

抽象角色:一般会使用接口或者抽象类来解决真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作客户:代理访问对象

代码步骤

    接口真实角色代理角色客户端访问代理

代理模式的好处:

可以使真实角色的操作更加纯粹公共部分交给代理角色,实现业务分工公共业务发生扩展,方便集中管理

缺点:

一个真实角色就会产生一个代理角色,代码量会翻倍,开发效率低 10.2:加深理解

10.3:动态代理

角色分析:

抽象角色:一般会使用接口或者抽象类来解决真实角色:被代理的角色代理角色:代理真实角色,代理真实角色后,我们一般会做一些附属操作客户:代理访问对象 11:AOP

11.2:使用spring实现aop

AOP:通过预编译或者运行期间动态代理的实现程序功能的统一维护的的一种技术。

method1:使用spring的api接口。 【主要是springapi接口实现】

method2:使用自定义类来实现aop【主要是切面】

method3:注解实现

12:整合mybatis

步骤:

    导入相关jar包
      junitmybatismysql数据库spring相关aop织入mybatis-spring【new】
    编写配置文件测试
12.1:回忆mybatis
    编写实体类编写核心配置文件编写接口编写mapper.xml测试
12.2:mybatis-spring
    编写数据源sqlSessionFactorysqlSessionTemplate需要给接口加实现类将自己写的实现类注入到spring中测试使用
13:声明式事务 13.1:回顾事务

要么成功,要么都失败事务在项目开发中十分重要,涉及到数据的一致性问题确保完整性和一致性

事务的ACID原则:

原子性一致性隔离性

多个业务可能操作同一个资源,防止数据损坏 持久性

事务一旦提交,无论系统发生什么问题,结果都不会发生变化 13.2:spring中的事务管理

声明式事务:AOP编号式事务:需要在代码中,进行事务的管理

思考:

为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况

    mysql数据库spring相关aop织入mybatis-spring【new】
    编写配置文件测试
12.1:回忆mybatis
    编写实体类编写核心配置文件编写接口编写mapper.xml测试
12.2:mybatis-spring
    编写数据源sqlSessionFactorysqlSessionTemplate需要给接口加实现类将自己写的实现类注入到spring中测试使用
13:声明式事务 13.1:回顾事务

要么成功,要么都失败事务在项目开发中十分重要,涉及到数据的一致性问题确保完整性和一致性

事务的ACID原则:

原子性一致性隔离性

多个业务可能操作同一个资源,防止数据损坏 持久性

事务一旦提交,无论系统发生什么问题,结果都不会发生变化 13.2:spring中的事务管理

声明式事务:AOP编号式事务:需要在代码中,进行事务的管理

思考:

为什么需要事务?

如果不配置事务,可能存在数据提交不一致的情况如果我们不在spring中去配置声明式事务,我们就需要在代码中手动配置事务!

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

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

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