【java】——我与spring的故事

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 对于你的敬仰,是在哪一个秋天,而与你的相识却推迟到了这个秋天,然而你却让我的思绪犹如秋天的落叶一样在空中肆意横飞,感谢路上有你——spring

【背景】


   对于你的敬仰,是在哪一个秋天,而与你的相识却推迟到了这个秋天,然而你却让我的思绪犹如秋天的落叶一样在空中肆意横飞,感谢路上有你——spring


【简介】


   如果说hibernate与struts是两幅有特殊意境的油画,那么你(spring)就是那一符独特的画框。

   最近对你的简单深入的理解,却发现并不是之前想象的你的样子;而是更美更有价值,当看到下面你的框架图,我就坚定了这样的思想


20161002222811464.png


   注:Spring是一个分层的javaSE/EEfull-stack(一站式)轻量级开源框架。


【对你的剖析】


 一、测试项目的宏观结构图(按照这样的包结构来建立,就相当于你对她进行了外表的整理,会让你看起来更加舒服哦O(∩_∩)O~)


20161002222908731.png


 二、建立普通的java项目,并引入jar包,引入的jar包如下图(可以到官网下载spring对应的压缩包,解压之后,在对应的测试项目中寻找对应的jar包)


20161002222925888.png


 三、Dao包中代码的展示


-
UserDao.java类:
package com.bjpowernode.spring.dao;
public interface UserDao {
  public void addUser(String username,String password);
}
UserDao4MySqlImpl.java类:
package com.bjpowernode.spring.dao;
public class UserDao4MySqlImpl implements UserDao {
  @Override
  public void addUser(String username, String password) {
    System.out.println("UserDao4MySqlImpl.addUser");
  }
}
UserDao4OracleImpl.java类:
package com.bjpowernode.spring.dao;
public class UserDao4OracleImpl implements UserDao {
  @Override
  public void addUser(String username, String password) {
    System.out.println("UserDao4OracleImpl.addUser");
  }
}
-


 四、Manager中代码的展示


-
UserManager.java类:
package com.bjpowernode.spring.manager;
public interface UserManager {
  public void addUser(String username,String password);
}
UserManagerImpl.java类:
package com.bjpowernode.spring.manager;
import com.bjpowernode.spring.dao.UserDao;
public class UserManagerImpl implements UserManager {
  private UserDao userDao;
  /*public UserManagerImpl(UserDao userDao) {
    this.userDao = userDao;
  }*/
  @Override
  public void addUser(String username, String password) {
    //由我们的应用程序负责服务(对象)定位
    //UserDao userDao = new UserDao4MySqlImpl();
    //UserDao userDao = new UserDao4OracleImpl();
    userDao.addUser(username, password);
  }
  public void setUserDao(UserDao userDao) {
    this.userDao = userDao;
  }
}
-


 五、applicationContext.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:aop="http://www.springframework.org/schema/aop"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd
           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">
  <bean id="userDao4Mysql" class="com.bjpowernode.spring.dao.UserDao4MySqlImpl"/>
  <bean id="userDao4Oracle" class="com.bjpowernode.spring.dao.UserDao4OracleImpl"/>
  <bean id="userManager" class="com.bjpowernode.spring.manager.UserManagerImpl">
  <!-- 第一种形式:
    <constructor-arg ref="userDao4Mysql"/>
     <constructor-arg ref="userDao4Oracle"/>
   -->
   <!-- 第二种形式: -->
   <property name="userDao" ref="userDao4Mysql"/>
  </bean>
</beans>
-


 六、客户端中代码的展示


-
package com.bjpowernode.spring.client;
import org.springframework.beans.factory.BeanFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import com.bjpowernode.spring.manager.UserManager;
public class Client {
  /**
   * @param args
   */
  public static void main(String[] args) {
    //由我们的应用程序负责服务(对象)定位
    //UserManager userManager = new UserManagerImpl(new UserDao4MySqlImpl());
    BeanFactory factory = new ClassPathXmlApplicationContext("applicationContext.xml");
    UserManager userManager = (UserManager)factory.getBean("userManager");
    userManager.addUser("张三", "123");
  }
}
-


【你的内心】


   一天、两天、三天......原来你的内心是这样想的,IOC容器。

   IOC(控制反转):本来是由应用程序管理的对象之间的依赖关系,现在交给了容器管理,这就叫控制反转,即交给了IOC容器,Spring的IOC容器主要使用DI方式实现的;不需要主动查找,对象的查找、定位和创建全部由容器管理。

 

   1、大量减少了Factory和Singleton的数量,使代码层次更加清晰,主要原因是我们不再查找、定位、创建和管理对象之间的依赖关系了,都交给IOC容器管理了。


   2、Spring的IOC容器是一个轻量级的容器,没有侵入性,不需要依赖容器的API,也不需要实现一些特殊接口。


   3、一个合理的设计最好尽量避免侵入性


   4、会使我们的框架工作的更好


   5、提供了AOP声明式服务能力,可以针对POJO对象提供声明式服务能力,如:声明式服务


   6、对于资源,如Hibernate Session或JDBC Connection我们不在负责开启和关闭


   7、鼓励了我们面向接口编程


   8、减少了代码中的耦合(解耦和),将耦合推迟到了配置文件中,发生了变化也更容易控制


【感受】


   经过这几天对你的了解,一个字;感谢在这个秋天和你相识并且亲密接触,在感受你内涵的同时,让我的思想有了一个层次性的提高,很喜欢与你以及你更多的伙伴们亲密接触哦O(∩_∩)O~

   秋天的相识,希望能够在下一个风花雪夜中与你的深入交流,思想渗透O(∩_∩)O~

   愿把青春都献给你们这些最美的思想O(∩_∩)O~

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
68 2
|
17天前
|
Java 开发者 微服务
Spring Boot 入门:简化 Java Web 开发的强大工具
Spring Boot 是一个开源的 Java 基础框架,用于创建独立、生产级别的基于Spring框架的应用程序。它旨在简化Spring应用的初始搭建以及开发过程。
37 6
Spring Boot 入门:简化 Java Web 开发的强大工具
|
1月前
|
人工智能 前端开发 Java
基于开源框架Spring AI Alibaba快速构建Java应用
本文旨在帮助开发者快速掌握并应用 Spring AI Alibaba,提升基于 Java 的大模型应用开发效率和安全性。
基于开源框架Spring AI Alibaba快速构建Java应用
|
2月前
|
前端开发 Java 数据库连接
Spring 框架:Java 开发者的春天
Spring 框架是一个功能强大的开源框架,主要用于简化 Java 企业级应用的开发,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,并由Pivotal团队维护。
75 1
Spring 框架:Java 开发者的春天
|
2月前
|
Java 数据库连接 开发者
Spring 框架:Java 开发者的春天
【10月更文挑战第27天】Spring 框架由 Rod Johnson 在 2002 年创建,旨在解决 Java 企业级开发中的复杂性问题。它通过控制反转(IOC)和面向切面的编程(AOP)等核心机制,提供了轻量级的容器和丰富的功能,支持 Web 开发、数据访问等领域,显著提高了开发效率和应用的可维护性。Spring 拥有强大的社区支持和丰富的生态系统,是 Java 开发不可或缺的工具。
|
2月前
|
JSON Java Maven
实现Java Spring Boot FCM推送教程
本指南介绍了如何在Spring Boot项目中集成Firebase云消息服务(FCM),包括创建项目、添加依赖、配置服务账户密钥、编写推送服务类以及发送消息等步骤,帮助开发者快速实现推送通知功能。
107 2
|
28天前
|
Java 数据库连接 API
Spring 框架的介绍(Java EE 学习笔记02)
Spring是一个由Rod Johnson开发的轻量级Java SE/EE一站式开源框架,旨在解决Java EE应用中的多种问题。它采用非侵入式设计,通过IoC和AOP技术简化了Java应用的开发流程,降低了组件间的耦合度,支持事务管理和多种框架的无缝集成,极大提升了开发效率和代码质量。Spring 5引入了响应式编程等新特性,进一步增强了框架的功能性和灵活性。
43 0
|
2月前
|
存储 人工智能 Java
将 Spring AI 与 LLM 结合使用以生成 Java 测试
AIDocumentLibraryChat 项目通过 GitHub URL 为指定的 Java 类生成测试代码,支持 granite-code 和 deepseek-coder-v2 模型。项目包括控制器、服务和配置,能处理源代码解析、依赖加载及测试代码生成,旨在评估 LLM 对开发测试的支持能力。
49 1
|
2月前
|
Java BI 调度
Java Spring的定时任务的配置和使用
遵循上述步骤,你就可以在Spring应用中轻松地配置和使用定时任务,满足各种定时处理需求。
155 1
|
2月前
|
存储 Java API
如何使用 Java 记录简化 Spring Data 中的数据实体
如何使用 Java 记录简化 Spring Data 中的数据实体
38 9