【spring5学习笔记】

本文深入探讨Spring框架,详细讲解了IOC(控制反转)的概念、原理及Bean管理,包括XML和注解方式的配置。此外,还介绍了AOP(面向切面编程)的基本概念、底层原理,包括JDK动态代理,并展示了如何在Spring中实现AOP操作。
摘要由CSDN通过智能技术生成

1. Spring概述

Spring是轻量级的开源的JavaEE框架,
Spring可以解决企业应用开发的复杂性

Spring有两个核心的部分:IOC和AOP

  • IOC: 控制反转,把创建对象过程交给Spring进行管理
  • AOP:面向切面,不修改源代码进行功能增强

特点

  1. 方便解耦,简化开发
  2. Aop编程支持
  3. 方便程序的测试
  4. 方便和其他框架进行整合
  5. 方便进行事务操作
  6. 降低API的开发难度

2.入门案例

spring.io

https://repo.spring.io/ui/native/release/org/springframework/spring/

在这里插入图片描述
创建java工程,导入相关jar包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建普通类,在这个类创建普通方法

package com.atguigu.spring5;

public class User {
   

    public void add(){
   
        System.out.println("add...");
    }
}

创建 Spring 配置文件,在配置文件配置创建的对象

<?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">

    <!--配置 User 对象创建-->
    <bean id="user" class="com.atguigu.spring5.User"></bean>

</beans>

进行测试代码编写


public class TestSpring5 {
   

    @Test
    public void testAdd(){
   
        // 1. 加载spring配置文件
        ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
        // 2. 获取配置创建的对象
        User user = context.getBean("user", User.class);
        System.out.println(user);
        user.add();
    }
}

3. IOC

3.1 什么是IOC?

控制反转,把对象的创建和对象之间的调用过程,交给Spring进行管理
使用IOC的目的:为了降低耦合度
做入门案例就是IOC实现

3.2 IOC的底层原理

通过 xml解析、工程模式、反射 做到的

工厂模式:
在这里插入图片描述
IOC解耦过程:
在这里插入图片描述
IOC(接口):
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂;
Spring提供了IOC容器的两种实现方式:(两个接口)

  1. BeanFactory:IOC容器最基本实现,是Spring内部的使用接口,不提供开发人员进行使用

  2. ApplicationContext:BeanFactory接口的子接口,提供了更多更强大的功能,一般由开发人员使用

BeanFactory加载配置文件的时候不会创建对象,在获取对象(使用)采取创建对象
ApplicationContext加载配置文件的时候就会创建对象

ApplicationContext接口有实现类:
在这里插入图片描述

3.3 IOC操作 Bean管理

3.3.1 什么是Bean管理

Bean管理指的是两个操作:
1.Spring创建对象
2.Spring注入属性

3.3.2 Bean管理操作有两种方式

  1. 基于XML配置文件方式实现
  2. 基于注解方式实现

3.3.3 基于XML创建对象

在spring配置文件中,使用bean标签,标签里添加对应属性,就可以实现对象创建
在bean标签有很对属性,介绍常用的属性
id属性:唯一标识
class属性:类全路径
name属性:和id作用相同,name可以加特殊字符
创建对象的时候,默认执行无参构造方法
在这里插入图片描述

3.3.3 基于XML注入属性

DI:依赖注入,就是注入属性
第一种注入的方式:set方式

/**
* 演示使用 set 方法进行注入属性
*/
public class Book {
   
 //创建属性
 private String bname;
 private String bauthor;
 //创建属性对应的 set 方法
 public void setBname(String bname) {
   
 this.bname = bname;
 }
 public void setBauthor(String bauthor) {
   
 this.bauthor = bauthor;
 }
}

在spring配置文件中配置对象创建,配置属性注入

<!--2 set 方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book">
 <!--使用 property 完成属性注入
 name:类里面属性名称
 value:向属性注入的值
 -->
 <property name="bname" value="易筋经"></property>
 <property name="bauthor" value="达摩老祖"></property>
</bean>

3.3.4 基于有参构造注入属性

第二种注入的方式:有参构造的方式

创建类,定义属性,创建属性对应有参数构造方法

/**
* 使用有参数构造注入
*/
public class Orders {
   
 //属性
 private String oname;
 private String address;
 //有参数构造
 public Orders(String oname,String address) {
   
 this.oname = oname;
 this.address = address;
 }
}

)在 spring 配置文件中进行配置

<!--3 有参数构造注入属性-->
<bean id="orders" class="com.atguigu.spring5.Orders">
 <constructor-arg name="oname" value="电脑"></constructor-arg>
 <constructor-arg name="address" value="China"></constructor-arg>
</bean>

3.3.5 p 名称空间注入

使用 p 名称空间注入,可以简化基于 xml 配置方式

第一步 添加 p 名称空间在配置文件中
在这里插入图片描述
第二步 进行属性注入,在 bean 标签里面进行操作

<!--2 set 方法注入属性-->
<bean id="book" class="com.atguigu.spring5.Book" p:bname="九阳神功" 
p:bauthor="无名氏"></bean>

3.3.6 XML注入其他类型属性

1、字面量
(1)null 值

<!--null 值-->
<property name="address">
 <null/>
</property>

(2)属性值包含特殊符号

<!--属性值包含特殊符号
 1 把<>进行转义 &lt; &gt;
 2 把带特殊符号内容写到 CDATA
-->
<property name="address">
 <value><![CDATA[<<南京>>]]></value>
</property>

3.3.7 注入属性-外部 bean

(1)创建两个类 service 类和 dao 类
(2)在 service 调用 dao 里面的方法
(3)在 spring 配置文件中进行配置

public class UserService {
   
 //创建 UserDao 类型属性,生成 set 方法
 private UserDao userDao;
 public void setUserDao(UserDao userDao) {
   
 this.userDao = userDao;
 }
 public void add() {
   
 System.out.println("service add...............");
 userDao.update();
 }
}

配置文件

<!--1 service 和 dao 对象创建-->
<bean id="userService" class="com.atguigu.spring5.service.UserService">
 <!--注入 userDao 对象
 name 属性:类里面属性名称
 ref 属性:创建 userDao 对象 bean 标签 id 值
 -->
 <property name="userDao" ref="userDaoImpl"></property>
</bean>
<bean id="userDaoImpl" class="com.atguigu.spring5.dao.UserDaoImpl"></bean>

3.3.8 注入属性-内部 bean

(1)一对多关系:部门和员工
一个部门有多个员工,一个员工属于一个部门
部门是一,员工是多
(2)在实体类之间表示一对多关系,员工表示所属部门,使用对象类型属性进行表示

//部门类
public class Dept {
   
 private String dname;
 public void setDname(String dname) {
   
 this.dname = dname;
 }
}
//员工类
public class Emp {
   
 private String ename;
 private String gender;
 //员工属于某一个部门,使用对象形式表示
 private Dept dept;
 public void setDept(Dept dept) {
   
 this.dept = dept;
 }
 public void setEname(String ename) {
   
 this.ename = ename;
 }
 public void setGender(String gender) {
   
 this.gender = gender;
 }
}

(3)在 spring 配置文件中进行配置

<!--内部 bean-->
<bean id="emp" class="com.atguigu.spring5.bean.Emp">
	 <!--设置两个普通属性-->
 	<property name="ename" value
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值