配套视频:
【编程不良人】快速入门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的博客-CSDN博客_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)); } }