配套视频:
【编程不良人】快速入门Spring,SpringBoot、SpringCloud学不好完全是因为Spring没有掌握!_哔哩哔哩_bilibili
4.Spring框架中的核心思想
4.1 IOC
-
IOC(inversion of control)控制反转# 1.定义 将对象的创建由原来(new)的方式转移到spring配置文件中,交给spring工厂,由spring工厂完成对象的创建。 -
DI(dependency injection)依赖注入:在IOC的基础上提出的补充概念# 1.定义 Spring不仅要创建对象,还要建立类与类之间的关系,因此在控制反转的基础上又提出了依赖注入的概念。

实测:
spring.xml

DeptServiceImpl

测试:

补充:
-
xml文件中的bean里面的id命名要见名知意,推荐使用接口首字母小写进行命名
-
容器中都有IOC的概念,例如:tomcat 容器/网络服务器
-
注释快捷键:Ctrl+/
-
复制当前行到下一行:Ctrl+D
-
get、set、toString、构造方法、重写方法等:Alt+Insert
-
跳转到接口实现类方法上:在接口上---Ctrl+Alt+B
-
添加if/else、while、for、try/catch、synchronized、Runnable等:选中代码---Ctrl+Alt+T
-
psvm 打印 main方法
-
sout 打印 System.out.println();
-
fori 打印 for (int i = 0; i < ; i++) { },forj、forz以此类推
-
itar 打印 for (int i = 0; i < array.length; i++) { = array[i]; }
-
iter 打印 for (Object o : ) { }
-
DAO层:(持久层 / 数据访问层)主要与数据库进行交互,做数据持久层的操作【面向表】
Service层:(业务层 / 服务层 )主要负责业务模块的逻辑应用设计,在service层调用接口进行业务逻辑处理【面向业务】
Controller层:(控制层 )负责对具体业务模块的流程控制,与前台互交,把前台传进来的参数进行处理,即:Controller负责请求转发,接受页面过来的参数,传给Service处理,接到返回值,再传给页面。
Entity层: (实体层 )数据库在项目中的类
View层: (视图层)负责前台jsp页面的表示
详见:Java中dao层、service层、controller层、entity层和view层的概述_疯狂的兔子Philip的博客-优快云博客_java 实体层
4.2 AOP
AOP( Aspect Oriental Programing ) :面向切面的编程
5. SET方式注入
配套视频: https://www.bilibili.com/video/BV12k4y167jK?p=3
5.1 八种基本类型+String类型 +日期类型的注入
<property name="name" value="zhagnsan"/> <property name="age" value="21"/> <property name="id" value="100063"/> <property name="bir" value="2012/12/12"/> <property name="price" value="23.23"/>
5.2 数组类型的注入
<!--注入数组类型数据--> <property name="qqs"> <array> <value>xxx</value> <value>qqq</value> <value>vvvv</value> </array> </property>
5.3 注入引用类型和集合类型
<!--注入引用类型和对象--> <property name="userDAO" ref="userDAO"/> <property name="lists"> <list> <value>aaa</value> <value>bbb</value> <value>ccc</value> </list> </property> <property name="maps"> <map> <entry key="aa" value="xiaohei"/> <entry key="bb" value="xiaoming"/> <entry key="cc" value="xiaosan"/> </map> </property> <property name="props"> <props> <prop key="url">jdbc:mysql://localhost:3306/test</prop> <prop key="driver">com.mysql.jdbc.Driver</prop> <prop key="username">hr</prop> <prop key="password">hr</prop> </props> </property>
注意:
1.引用类型使用ref属性注入,基本类型使用value属性注入
2.props是特殊的map,也采用key-value的形式进行标识
5.4 实测
spring.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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <bean id="deptDAO" class="di.DeptDAOImpl"></bean> <bean id="deptService" class="di.DeptServiceImpl"> <property name="deptDAO2" ref="deptDAO"/> <property name="name" value="Li Ming"/> <property name="bir" value="2022/03/31 20:17:58"/> <property name="array"> <array> <value>小猪</value> <value>小狗</value> <value>小猫</value> </array> </property> <property name="deptDAOS"> <array> <ref bean="deptDAO"/> <ref bean="deptDAO"/> <ref bean="deptDAO"/> </array> </property> <property name="hobbies"> <list> <value>看书</value> <value>打豆豆</value> <value>睡觉</value> </list> </property> <property name="daos"> <list> <ref bean="deptDAO"/> <ref bean="deptDAO"/> <ref bean="deptDAO"/> </list> </property> <property name="maps"> <map> <entry key="aaa" value="123"/> <entry key="bbb" value="456"/> <entry key="ccc" value="789"/> </map> </property> <property name="properties"> <props> <prop key="111">qwe</prop> <prop key="222">asd</prop> <prop key="333">zxc</prop> </props> </property> </bean> </beans>
DeptServiceImpl.java
package di;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.Properties;
public class DeptServiceImpl implements DeptService{
private DeptDAOImpl deptDAO2;
private String name;
private Date bir;
private String[] array;
private DeptDAO[] deptDAOS;
private List<String> hobbies;
private List<DeptDAO> daos;
private Map<String,String> maps;
private Properties properties;
public void setDeptDAO2(DeptDAOImpl deptDAO2) {
this.deptDAO2 = deptDAO2;
}
public void setName(String name) {
this.name = name;
}
public void setBir(Date bir) {
this.bir = bir;
}
public void setArray(String[] array) {
this.array = array;
}
public void setDeptDAOS(DeptDAO[] deptDAOS) {
this.deptDAOS = deptDAOS;
}
public void setHobbies(List<String> hobbies) {
this.hobbies = hobbies;
}
public void setDaos(List<DeptDAO> daos) {
this.daos = daos;
}
public void setMaps(Map<String, String> maps) {
this.maps = maps;
}
public void setProperties(Properties properties) {
this.properties = properties;
}
@Override
public void save(String name) {
System.out.println("DeptServiceImpl: " + name);
deptDAO2.save(name);
System.out.println("Name: " + this.name);
System.out.println("Bir: " + bir);
for (String arr:array) {
System.out.println(arr);
}
for (DeptDAO dao:deptDAOS) {
System.out.println(dao);
}
hobbies.forEach(hobby-> System.out.println("hobby = " + hobby));
daos.forEach(dao-> System.out.println("dao = " + dao));
maps.forEach((key,value)-> System.out.println("key = " + key +",value = " + value));
properties.forEach((key,value)-> System.out.println("key = " + key +",value = " + value));
}
}

Spring框架详解:IOC、DI与AOP及注入实践
本文深入介绍了Spring框架的核心思想,包括IOC(控制反转)和DI(依赖注入),并提供了详细的实测案例,展示了如何在XML配置文件中进行对象创建和关系建立。同时,讲解了AOP(面向切面编程)的概念。文章还涵盖了不同类型的注入方式,如基本类型、引用类型、数组和集合的注入,通过实例代码展示了如何在Spring中实现这些操作。
1830

被折叠的 条评论
为什么被折叠?



