【2021Spring编程实战笔记】Spring开发分享~(下)

简介: 【2021Spring编程实战笔记】Spring开发分享~(下)

【2021Spring编程实战笔记】Spring开发分享~(上)+https://developer.aliyun.com/article/1621239

04、构造注入(用的不多,只做了解)

  • 将需要注入的对象声明为成员变量
package construct;
public class Car {
    private String brand;
    private String corp;
    private Double price;
    private int maxSpeed;
}
  • 利用构造函数,我写了两个:
package construct;
public class Car {
    public Car(String brand, String corp, Double price) {
        this.brand = brand;
        this.corp = corp;
        this.price = price;
    }
    public Car(String brand, String corp, int maxSpeed) {
        this.brand = brand;
        this.corp = corp;
        this.maxSpeed = maxSpeed;
    }
}
  • 工厂容器里边配置一下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="car" class="construct.Car">
        <constructor-arg value="Audi" type="java.lang.String"/>
        <constructor-arg value="luntai" type="java.lang.String"/>
        <constructor-arg value="30" type="java.lang.Double"/>
    </bean>
    <bean id="car1" class="construct.Car">
        <constructor-arg value="Audi" type="java.lang.String"/>
        <constructor-arg value="luntai" type="java.lang.String"/>
        <constructor-arg value="300" type="int"/>
    </bean>
</beans>
  • 构造注入的测试
package construct;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class CarTest {
    public static void main(String[] args) {
        ApplicationContext Context = new ClassPathXmlApplicationContext("/init/init.xml");
        Car car = (Car) Context.getBean("car");
        System.out.println(car.toString());
    }
}
  • 执行:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBfGmG1O-1604408298814)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028105124.png)]

05、自动注入(用的也不多)

package autodi;
public class BookDAOImpl implements BookDAO {
    private BookDAO bookDAO;
    @Override
    public void save() {
        System.out.println("BookDAO invoke~~~");
    }
}
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    <bean id="bookDAO" class="autodi.BookDAOImpl"/>
    <!--
        autowrite的作用:用来指定当前组件中依赖的组件的注入方式是什么
        注意:类中成员变量与工厂中bean的id一致则自动赋值,否则不注入
        byname:根据类中的成员变量名进行注入
        bytype:根据类中的成员变量类型进行注入
    -->
    <!--<bean id="bookService" class="autodi.BookServiceImpl" autowire="byName"/>-->
    <!--
        类中成员变量的类型与工厂中bean的类型一致则强行注入,否则不注入。
    -->
    <bean id="bookService" class="autodi.BookServiceImpl" autowire="byType"/>
</beans>

06、spring工厂的细节

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-583X3hlZ-1604408298815)(https://cdn.jsdelivr.net/gh/JackieLing/mage1/img/20201028204142.png)]

07、AOP面向切面编程

7.1、静态代理(proxy)

  • 给一幅图做一个简单介绍:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XhNOlhdV-1604408298821)(https://img.rruu.net/image/5f9a7bea0f104)]

7.2、动态代理

  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TnV8QcCC-1604408298824)(https://img.rruu.net/image/5f9aa84aab174)]

7.3、面向切面编程AOP原理概念

7.4、AOP编程的编程步骤

7.4.1引入AOP编程相关的依赖

<dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-beans</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-expression</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aop</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>4.3.20.RELEASE</version>
    </dependency>
  </dependencies>

7.4.2开发项目额外功能通知

7.4.3配置切面spring.xml

7.5、aop编程之环绕通知

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EsEUfSke-1604408298833)(https://img.rruu.net/image/5f9faf6ab5d89)]

7.6、切入点表达式

  • 切到某个类,就会为这个类创建 动态代理对象
  • [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QFkNJslW-1604408298835)(https://img.rruu.net/image/5fa0a90a1676a)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bf2nKyjC-1604408298836)(https://img.rruu.net/image/5fa0aaebe47a7)]

08、IOC和AOP的复习

09、spring创建复杂对象

除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。

对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?

10、spring整合mybatis思路分析

10.1、引入依赖

bj-1604408298837)]

08、IOC和AOP的复习

  • [外链图片转存中…(img-0gRvXlDK-1604408298839)]

[外链图片转存中…(img-A6sMkGOT-1604408298840)]

09、spring创建复杂对象

除了我们之前学过的new简单对象,其实还有很多对象是不能new出来的,比如抽象类对象,我们需要用官方提供的方法来对它进行实例化,然后调用实现功能。

对于复杂对象,我们不能交给工厂处理,也不能new处理。那么该如何创建这些复杂对象呢?

[外链图片转存中…(img-VsptG5pO-1604408298841)]

[外链图片转存中…(img-uZtdmRb6-1604408298842)]

[外链图片转存中…(img-eCJdi5fG-1604408298843)]

10、spring整合mybatis思路分析

10.1、引入依赖

目录
打赏
0
1
1
0
42
分享
相关文章
Java 21 与 Spring Boot 3.2 微服务开发从入门到精通实操指南
《Java 21与Spring Boot 3.2微服务开发实践》摘要: 本文基于Java 21和Spring Boot 3.2最新特性,通过完整代码示例展示了微服务开发全流程。主要内容包括:1) 使用Spring Initializr初始化项目,集成Web、JPA、H2等组件;2) 配置虚拟线程支持高并发;3) 采用记录类优化DTO设计;4) 实现JPA Repository与Stream API数据访问;5) 服务层整合虚拟线程异步处理和结构化并发;6) 构建RESTful API并使用Springdoc生成文档。文中特别演示了虚拟线程配置(@Async)和StructuredTaskSco
102 0
Spring Boot 3.x 现代化应用开发实战技巧与最佳实践
本指南基于Spring Boot 3.x,融合微服务、云原生与响应式编程等前沿技术,打造现代化应用开发实践。通过构建智能电商平台案例,涵盖商品、订单、用户等核心服务,展示Spring WebFlux、OAuth 2.0认证、Spring Cloud Gateway路由、GraalVM原生编译等技术实现。同时提供Docker/Kubernetes部署方案及性能优化策略,助您掌握从开发到生产的全流程。代码示例详实,适合进阶开发者参考。
120 2
Spring AI 实战|Spring AI入门之DeepSeek调用
本文介绍了Spring AI框架如何帮助Java开发者轻松集成和使用大模型API。文章从Spring AI的初探开始,探讨了其核心能力及应用场景,包括手动与自动发起请求、流式响应实现打字机效果,以及兼容不同AI服务(如DeepSeek、通义千问)的方法。同时,还详细讲解了如何在生产环境中添加监控以优化性能和成本管理。通过Spring AI,开发者可以简化大模型调用流程,降低复杂度,为企业智能应用开发提供强大支持。最后,文章展望了Spring AI在未来AI时代的重要作用,鼓励开发者积极拥抱这一技术变革。
778 71
Spring AI 实战|Spring AI入门之DeepSeek调用
Java 开发玩转 MCP:从 Claude 自动化到 Spring AI Alibaba 生态整合
本文详细讲解了Java开发者如何基于Spring AI Alibaba框架玩转MCP(Model Context Protocol),涵盖基础概念、快速体验、服务发布与调用等内容。重点包括将Spring应用发布为MCP Server(支持stdio与SSE模式)、开发MCP Client调用服务,以及在Spring AI Alibaba的OpenManus中使用MCP增强工具能力。通过实际示例,如天气查询与百度地图路线规划,展示了MCP在AI应用中的强大作用。最后总结了MCP对AI开发的意义及其在Spring AI中的实现价值。
1145 10
Spring AI与DeepSeek实战四:系统API调用
在AI应用开发中,工具调用是增强大模型能力的核心技术,通过让模型与外部API或工具交互,可实现实时信息检索(如天气查询、新闻获取)、系统操作(如创建任务、发送邮件)等功能;本文结合Spring AI与大模型,演示如何通过Tool Calling实现系统API调用,同时处理多轮对话中的会话记忆。
678 57
飞算 JavaAI:革新电商订单系统 Spring Boot 微服务开发
在电商订单系统开发中,传统方式耗时约30天,需应对复杂代码、调试与测试。飞算JavaAI作为一款AI代码生成工具,专注于简化Spring Boot微服务开发。它能根据业务需求自动生成RESTful API、数据库交互及事务管理代码,将开发时间缩短至1小时,效率提升80%。通过减少样板代码编写,提供规范且准确的代码,飞算JavaAI显著降低了开发成本,为软件开发带来革新动力。
从基础到进阶:Spring Boot + Thymeleaf 整合开发中的常见坑与界面优化
本文深入探讨了 **Spring Boot + Thymeleaf** 开发中常见的参数绑定问题与界面优化技巧。从基础的 Spring MVC 请求参数绑定机制出发,分析了 `MissingServletRequestParameterException` 的成因及解决方法,例如确保前后端参数名、类型一致,正确设置请求方式(GET/POST)。同时,通过实际案例展示了如何优化支付页面的视觉效果,借助简单的 CSS 样式提升用户体验。最后,提供了官方文档等学习资源,帮助开发者更高效地掌握相关技能。无论是初学者还是进阶用户,都能从中受益,轻松应对项目开发中的挑战。
117 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等