【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;
相关文章
|
2月前
|
安全 Java 应用服务中间件
Spring Boot + Java 21:内存减少 60%,启动速度提高 30% — 零代码
通过调整三个JVM和Spring Boot配置开关,无需重写代码即可显著优化Java应用性能:内存减少60%,启动速度提升30%。适用于所有在JVM上运行API的生产团队,低成本实现高效能。
287 3
|
1月前
|
安全 前端开发 Java
《深入理解Spring》:现代Java开发的核心框架
Spring自2003年诞生以来,已成为Java企业级开发的基石,凭借IoC、AOP、声明式编程等核心特性,极大简化了开发复杂度。本系列将深入解析Spring框架核心原理及Spring Boot、Cloud、Security等生态组件,助力开发者构建高效、可扩展的应用体系。(238字)
|
2月前
|
人工智能 Java API
构建基于Java的AI智能体:使用LangChain4j与Spring AI实现RAG应用
当大模型需要处理私有、实时的数据时,检索增强生成(RAG)技术成为了核心解决方案。本文深入探讨如何在Java生态中构建具备RAG能力的AI智能体。我们将介绍新兴的Spring AI项目与成熟的LangChain4j框架,详细演示如何从零开始构建一个能够查询私有知识库的智能问答系统。内容涵盖文档加载与分块、向量数据库集成、语义检索以及与大模型的最终合成,并提供完整的代码实现,为Java开发者开启构建复杂AI智能体的大门。
1435 58
|
1月前
|
消息中间件 缓存 Java
Spring框架优化:提高Java应用的性能与适应性
以上方法均旨在综合考虑Java Spring 应该程序设计原则, 数据库交互, 编码实践和系统架构布局等多角度因素, 旨在达到高效稳定运转目标同时也易于未来扩展.
126 8
|
2月前
|
监控 Java 数据库
从零学 Dropwizard:手把手搭轻量 Java 微服务,告别 Spring 臃肿
Dropwizard 整合 Jetty、Jersey 等成熟组件,开箱即用,无需复杂配置。轻量高效,启动快,资源占用少,内置监控、健康检查与安全防护,搭配 Docker 部署便捷,是构建生产级 Java 微服务的极简利器。
289 3
|
3月前
|
前端开发 Java 开发者
Java新手指南:在Spring MVC中使用查询字符串与参数
通过结合实际的需求和业务逻辑,开发者可以灵活地利用这些机制,为用户提供更丰富而高效的Web应用体验。
156 15
|
4月前
|
JSON 前端开发 Java
Java新手指南:如何在Spring MVC中处理请求参数
处理Spring MVC中的请求参数是通过控制器方法中的注解来完成的。这些注解包括 `@RequestParam`, `@PathVariable`, `@ModelAttribute`, `@RequestBody`, `@RequestHeader`, `@Valid`, 和 `@RequestMapping`。使用这些注解可以轻松从HTTP请求中提取所需信息,例如URL参数、表单数据或者JSON请求体,并将其转换成Java对象以供进一步处理。
474 17
|
4月前
|
安全 Java 微服务
Java 最新技术和框架实操:涵盖 JDK 21 新特性与 Spring Security 6.x 安全框架搭建
本文系统整理了Java最新技术与主流框架实操内容,涵盖Java 17+新特性(如模式匹配、文本块、记录类)、Spring Boot 3微服务开发、响应式编程(WebFlux)、容器化部署(Docker+K8s)、测试与CI/CD实践,附完整代码示例和学习资源推荐,助你构建现代Java全栈开发能力。
548 1

热门文章

最新文章