spring学习笔记

spring课堂笔记框架: 一个java应用程序的半成品项目,该项目中对java的软件开发进行了一部分的封装和定义标准,我们使用时 只需要学习框架,则会学会使用该框架开发新项目,再开发中使用框架可以提高开发效率,有利于团队开发。​ 缺点:​ 1,需要导入大量的jar包,会出现版本冲突​ 2,项目运行效率低​ 优点:​ 1,提高开发效率​ 2,利于团队开发​ 3,有利于后期的维护springBoot mybatis —> SMspri
摘要由CSDN通过智能技术生成

spring学习笔记

框架: 一个java应用程序的半成品项目,该项目中对java的软件开发进行了一部分的封装和定义标准,我们使用时 只需要学习框架,则会学会使用该框架开发新项目,再开发中使用框架可以提高开发效率,有利于团队开发。

​ 缺点:

​ 1,需要导入大量的jar包,会出现版本冲突

​ 2,项目运行效率低

​ 优点:

​ 1,提高开发效率

​ 2,利于团队开发

​ 3,有利于后期的维护

springBoot mybatis —> SM

springmvc spring mybatis —> SSM

struts2 spring hibernate —> SSH

目标:

​ spring简介

​ spring核心

​ IOC/DI

​ AOP

​ 声明式事务管理

​ jdbctemplete

spring简介

Spring 是分层的 Java SE/EE 应用 full-stack 轻量级开源框架,以 IoC(Inverse Of Control: 反转控制)和 AOP(Aspect Oriented Programming:面向切面编程)为内核,提供了展现层 Spring MVC 和持久层 Spring JDBC 以及业务层事务管理等众多的企业级应用技术,还能整合开源世界众多 著名的第三方框架和类库,逐渐成为使用最多的 Java EE 企业应用开源框架。

轻量级框架, Java EE的春天,当前最主流框架。

IOC/DI 反转控制 依赖注入

AOP 面向切面编程

Spring的发展历史:

​ 1997 年 IBM 提出了 EJB 的思想

​ 1998 年,SUN 制定开发标准规范 EJB1.0

​ 1999 年,EJB1.1 发布

​ 2001 年,EJB2.0 发布

​ 2003 年,EJB2.1 发布

​ 2006 年,EJB3.0 发布

Rod Johnson(spring 之父)

​ Expert One-to-One J2EE Design and Development(2002)

​ 阐述了 J2EE 使用 EJB 开发设计的优点及解决方案

​ Expert One-to-One J2EE Development without EJB(2004)

​ 阐述了 J2EE 开发不使用 EJB 的解决方式(Spring 雏形)

2017 年 9 月份发布了 spring 的最新版本 spring 5.0 通用版(GA)

发展优势

方便解耦,简化开发

通过 Spring 提供的 IoC 容器,可以将对象间的依赖关系交由 Spring 进行控制,避免硬编码所造 成的过度程序耦合。用户也不必再为单例模式类、属性文件解析等这些很底层的需求编写代码,可 以更专注于上层的应用。

AOP 编程的支持

通过 Spring 的 AOP 功能,方便进行面向切面的编程,许多不容易用传统 OOP 实现的功能可以通过 AOP 轻松应付。

声明式事务的支持

可以将我们从单调烦闷的事务管理代码中解脱出来,通过声明式方式灵活的进行事务的管理, 提高开发效率和质量。

方便程序的测试

可以用非容器依赖的编程方式进行几乎所有的测试工作,测试不再是昂贵的操作,而是随手可 做的事情。

方便集成各种优秀框架

Spring 可以降低各种框架的使用难度,提供了对各种优秀框架(Struts、Hibernate、Hessian、Quartz 等)的直接支持。

降低 JavaEE API******的使用难度

Spring 对 JavaEE API(如 JDBC、JavaMail、远程调用等)进行了薄薄的封装层,使这些 API 的 使用难度大为降低。

Java******源码是经典学习范例

Spring 的源代码设计精妙、结构清晰、匠心独用,处处体现着大师对 Java 设计模式灵活运用以 及对 Java 技术的高深造诣。它的源代码无意是 Java 技术的最佳实践的范例。

通俗的说:

​ 使现有技术更加易用,推进编码最佳实践

​ 老技术新用法

​ 降低耦合性【亲密度】

七大部分组成

在这里插入图片描述

IoC容器【控制翻转/依赖注入】

AOP实现

数据访问支持

简化JDBC/ORM 框架

声明式事务

spring的web支持

spring的单元测试

Spring在mvc中的江湖位置:

​ [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u8w5ZyGJ-1622703393122)(D:\王者班高级资料\笔记\02spring\typoraimg\wps2.jpg)]

耦合度

耦合度是再java中,类与类之间的关系,可以是 亲密度.

程序编程思想: 高内聚,低耦合

最好是再编译期不存在问题即可

public class TestJDBC {
   
    public static void main(String[] args) throws  Exception {
   
        // 加载驱动(使用Driver来创建该类的对象,放入到内存中)   关系: 非常亲密    高耦合
        // 降低耦合度     低耦合  解耦   : 使用反射机制来创建对象,并维护类与类之间的关系
        //DriverManager.registerDriver(new Driver());  // 硬编码
        Class.forName("com.mysql.jdbc.Driver");

        // 建立连接
        Connection connection = DriverManager.getConnection("jdbc:mysql:///duobiao", "root", "root");
        System.out.println( connection);
    }
}

工厂模式模仿spring的IOC

定义一个dao层并实现改层的方法(save() update() ),编写一个service层来调用dao层中的方法来实现功能.

UserDao.java

public interface UserDao {
   

    public void save();

    public void update();
    
}

UserDaoImpl.java

public class UserDaoImpl implements UserDao {
   
    @Override
    public void save() {
   
        System.out.println("----------添加数据(Mysql)----------");
    }

    @Override
    public void update() {
   
        System.out.println("=============修改数据(Mysql)========");
    }
}

UserOracleDaoIml.java

public class UserOracleDaoImpl implements UserDao {
   
    @Override
    public void save() {
   
        System.out.println("------添加数据(oracle)--------");
    }

    @Override
    public void update() {
   
        System.out.println("+++修改数据(oracle)+++");
    }
}

UserServer.java

public class UserService {
   
    // 使用servie中的业务方法来调用dao中的方法来使用
    //UserDao userDao = new UserDaoImpl();
    UserDao userDao = new UserOracleDaoImpl();
    // 分析缺点:  userServer和UserDao之间的耦合性较高    userDao不存在    硬编码方式
    //   解决 :  降低耦合  解耦   :   反射机制(BeanFactory)

    public void insert(){
   
        userDao.save();
    }

    public void update(){
   
        userDao.update();
    }
}

UserUI.java

public class UserUI {
   

    public static void main(String[] args) {
   
        UserService userService = new UserService();

        userService.insert();

        userService.update();
    }
}

分析

​ 再UserServie中会发现,如果想要执行dao中的方法实现添加,那么必须使用 new 来创建userDao对象,如果连接不同的数据库,则 new 后的类也要随之改变,这种为***硬编码*方式,该方式不利于代码更改,类与类之间的耦合性较高,不符合"高内聚,低耦合"**的编程思想。

解决

​ 可以使用反射机制与工厂模式来创建一个工厂类,通过配置文件形式来搭建类与类之间的关系.使用反射机制的原来来代替原有的new来创建对象的过程。

BeanFactory.java

public class BeanFactory {
   

    private static Properties properties = new Properties();
    static{
   
        InputStream rs = BeanFactory.class.getClassLoader().getResourceAsStream("bean.properties");
        try {
   
            properties.load(rs);
        } catch (IOException e) {
   
            e.printStackTrace();
        }
    }

    // 定义一个静态方法,来使用java的反射机制创建对象
    public static Object getInstance(String key){
   
        Object object = null;
        try {
   
            Class<?> ac = Class.forName(properties.getProperty(key));
            object = ac.newInstance();
        } catch (Exception e){
   
            e.printStackTrace();
        }
        return object;
    }
}

bean.properties

# key = value
userDao=cn.hd.dao.impl.UserOracleDaoImpl
userService=cn.hd.service.UserService

则userSercie中的对象创建就变为了以beanFactory的模式创建了

 //   解决 :  降低耦合  解耦   :   反射机制(BeanFactory)
 UserDao userDao = (UserDao) BeanFactory.getInstance("userDao");

UserUI中的创建userService的对象创建也变为了beanFactory的模式创建了

 public static void main(String[] args) {
   
        //UserService userService = new UserService();
        // 改变后
        UserService userService = (UserService) BeanFactory.getInstance("userService");
        userService.insert();
        userService.update();
    }

总结

​ 使用工厂模式和反射机制来实现以配置文件的形式创建对象的模式,可以释放类与类之间的耦合度,实现解耦

缺点

​ 类与类之间的关系还不能完全解耦,那么我们就可以学习使用spring框架来实现完全解耦了。

spring入门案例

实现步骤:

​ 1,再pom.xml文件中配置spring的核心jar包坐标

		
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值