【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、引入依赖

目录
相关文章
|
2月前
|
Java API 数据库
构建RESTful API已经成为现代Web开发的标准做法之一。Spring Boot框架因其简洁的配置、快速的启动特性及丰富的功能集而备受开发者青睐。
【10月更文挑战第11天】本文介绍如何使用Spring Boot构建在线图书管理系统的RESTful API。通过创建Spring Boot项目,定义`Book`实体类、`BookRepository`接口和`BookService`服务类,最后实现`BookController`控制器来处理HTTP请求,展示了从基础环境搭建到API测试的完整过程。
58 4
|
10天前
|
Java Spring
一键注入 Spring 成员变量,顺序编程
介绍了一款针对Spring框架开发的插件,旨在解决开发中频繁滚动查找成员变量注入位置的问题。通过一键操作(如Ctrl+1),该插件可自动在类顶部添加`@Autowired`注解及其成员变量声明,同时保持光标位置不变,有效提升开发效率和代码编写流畅度。适用于IntelliJ IDEA 2023及以上版本。
一键注入 Spring 成员变量,顺序编程
|
3天前
|
XML JSON Java
Spring Boot 开发中常见的错误
本文总结了 Java 开发中常见的几个问题及其改进方法,包括:1. 过度使用 `@Component` 注解;2. `@ResponseBody` 注解的错误用法;3. `@Autowired` 的不当使用;4. `application.properties` 管理不善;5. 异常处理不当。每部分详细解释了错误情况和建议的改进方案,并提供了相应的代码示例。
31 11
|
3天前
|
IDE Java 测试技术
互联网应用主流框架整合之Spring Boot开发
通过本文的介绍,我们详细探讨了Spring Boot开发的核心概念和实践方法,包括项目结构、数据访问层、服务层、控制层、配置管理、单元测试以及部署与运行。Spring Boot通过简化配置和强大的生态系统,使得互联网应用的开发更加高效和可靠。希望本文能够帮助开发者快速掌握Spring Boot,并在实际项目中灵活应用。
23 5
|
1天前
|
前端开发 Java 开发者
这款免费 IDEA 插件让你开发 Spring 程序更简单
Feign-Helper 是一款支持 Spring 框架的 IDEA 免费插件,提供 URL 快速搜索、Spring Web Controller 路径一键复制及 Feign 与 Controller 接口互相导航等功能,极大提升了开发效率。
|
21天前
|
前端开发 JavaScript Java
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
如何使用 Spring Boot 和 Angular 开发全栈应用程序:全面指南
31 1
|
8天前
|
XML Java 数据格式
Spring Boot 开发中的常见失误
本文深入分析了Spring Boot开发中常见的失误,包括不当使用@Component、@ResponseBody、@Autowired注解,以及不良的异常处理和日志记录实践,提供了有效的规避策略,帮助开发者提升代码质量和系统性能。
|
1月前
|
存储 运维 安全
Spring运维之boot项目多环境(yaml 多文件 proerties)及分组管理与开发控制
通过以上措施,可以保证Spring Boot项目的配置管理在专业水准上,并且易于维护和管理,符合搜索引擎收录标准。
42 2
|
2月前
|
自然语言处理 Java API
Spring Boot 接入大模型实战:通义千问赋能智能应用快速构建
【10月更文挑战第23天】在人工智能(AI)技术飞速发展的今天,大模型如通义千问(阿里云推出的生成式对话引擎)等已成为推动智能应用创新的重要力量。然而,对于许多开发者而言,如何高效、便捷地接入这些大模型并构建出功能丰富的智能应用仍是一个挑战。
226 6
|
2月前
|
XML Java 数据格式
提升效率!Spring Boot 开发中的常见失误轻松规避
本文深入探讨了在 Spring Boot 开发中常见的失误,包括不当使用注解、不良异常处理、低效日志记录等,提供了有效的规避策略,帮助开发者提升代码质量和系统性能,构建更健壮、高效的应用程序。