【java】——我与spring的故事

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,高可用系列 2核4GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 对于你的敬仰,是在哪一个秋天,而与你的相识却推迟到了这个秋天,然而你却让我的思绪犹如秋天的落叶一样在空中肆意横飞,感谢路上有你——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~

相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。 &nbsp; 相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/mysql&nbsp;
相关文章
|
7月前
|
人工智能 Java API
Java也能快速搭建AI应用?一文带你玩转Spring AI可落地性
Java语言凭借其成熟的生态与解决方案,特别是通过 Spring AI 框架,正迅速成为 AI 应用开发的新选择。本文将探讨如何利用 Spring AI Alibaba 构建在线聊天 AI 应用,并实现对其性能的全面可观测性。
1757 101
|
3月前
|
IDE Java 数据库连接
解决Java环境中无法识别org.mybatis.spring.annotation.MapperScan的问题。
祝你好运,在这场MyBatis的魔法冒险中获得胜利!记住,魔法书(官方文档)永远是你最好的朋友。
218 18
|
2月前
|
Java 数据库连接 API
Java 8 + 特性及 Spring Boot 与 Hibernate 等最新技术的实操内容详解
本内容涵盖Java 8+核心语法、Spring Boot与Hibernate实操,按考试考点分类整理,含技术详解与代码示例,助力掌握最新Java技术与应用。
89 2
|
3月前
|
Java 数据库连接 API
Java 对象模型现代化实践 基于 Spring Boot 与 MyBatis Plus 的实现方案深度解析
本文介绍了基于Spring Boot与MyBatis-Plus的Java对象模型现代化实践方案。采用Spring Boot 3.1.2作为基础框架,结合MyBatis-Plus 3.5.3.1进行数据访问层实现,使用Lombok简化PO对象,MapStruct处理对象转换。文章详细讲解了数据库设计、PO对象实现、DAO层构建、业务逻辑封装以及DTO/VO转换等核心环节,提供了一个完整的现代化Java对象模型实现案例。通过分层设计和对象转换,实现了业务逻辑与数据访问的解耦,提高了代码的可维护性和扩展性。
140 1
|
5月前
|
前端开发 Java 物联网
智慧班牌源码,采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署
智慧班牌系统是一款基于信息化与物联网技术的校园管理工具,集成电子屏显示、人脸识别及数据交互功能,实现班级信息展示、智能考勤与家校互通。系统采用Java + Spring Boot后端框架,搭配Vue2前端技术,支持SaaS云部署与私有化定制。核心功能涵盖信息发布、考勤管理、教务处理及数据分析,助力校园文化建设与教学优化。其综合性和可扩展性有效打破数据孤岛,提升交互体验并降低管理成本,适用于日常教学、考试管理和应急场景,为智慧校园建设提供全面解决方案。
369 70
|
3月前
|
SQL Java 数据库
解决Java Spring Boot应用中MyBatis-Plus查询问题的策略。
保持技能更新是侦探的重要素质。定期回顾最佳实践和新技术。比如,定期查看MyBatis-Plus的更新和社区的最佳做法,这样才能不断提升查询效率和性能。
140 1
|
5月前
|
人工智能 Java 程序员
Java程序员在AI时代必会的技术:Spring AI
在AI时代,Java程序员需掌握Spring AI技术以提升竞争力。Spring AI是Spring框架在AI领域的延伸,支持自然语言处理、机器学习集成与自动化决策等场景。它简化开发流程,无缝集成Spring生态,并提供对多种AI服务(如OpenAI、阿里云通义千问)的支持。本文介绍Spring AI核心概念、应用场景及开发步骤,含代码示例,助你快速入门并构建智能化应用,把握AI时代的机遇。
1101 61