Sping是轻量级的开源J2EE框架,可以解决企业应用开发的复杂性
Spring有两个核心部分为Ioc和AOP
Ioc:控制反转,吧创建对象过程交给Sping进行管理
AOP:面向切面,不修改代码进行功能增强
创建Maven项目
IDEA-2024 就直接创建java项目即可
创建完成项目后需要在pom.xml文件中添加依赖这里我提了我使用的项目依赖,如果下载失败可以尝试自己安装maven然后将仓库设置为阿里云中央仓库
<dependencies><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.24</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>5.3.24</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency> </dependencies>
Sping框架基础就配置好了
IOC底层实现
xml解析
工厂模式
反射技术
IOC思想基于IOC容器完成,IOC容器底层就是对象工厂
Sping提供了Ioc容器的两种实现方式(两个接口)
BeanFactory和APPlicationContext
ioc操作Bean管理
Bean管理是指
Sping创建对象
Spirng注入对象
public class User{
private String userName;
public void setUserName(String userName){
this.userName=userName;
}
}
Sping 一般使用自动注入如果你的xml配置没有出错那么你在项目中的
src/test/java右键新建就会出现xml文件,如果没有就是你的 pom.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"xmlns:p="http://www.springframework.org/schema/p"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"><!--bean是一个容器 class代表着文件的位置--><bean id="c1" class="com.zk.c1"><constructor-arg value=""/><!--name是一注入内容的方法 value代表着注入的内容--><property name="f2" value="---c1代码"/></bean>
</beans>
这是我的c1文件
package com.zk;public class c1 {private String f2;public c1() {}public c1(String f2) {this.f2 = f2;}public void f1(){System.out.println("adsfasdf"+f2);}public void setF2(String f2){this.f2 = f2;}}
他还有很多别的注入方式
构造函数注入
<bean id="c1" class="com.zk.c1">
<constructor-arg index="0" value="-----xxxx-----">
</bean>
这是集合注入
<?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="jh" class="com.zk.jh" ><property name="y" ><array><value>1</value><value>2</value><value>3</value></array></property><property name="z"><list><value>1</value><value>2</value><value>3</value></list></property><property name="w"><map><entry key="1" value="2"></entry></map></property> </bean> </beans>
package com.zk;import java.util.List; import java.util.Map;public class jh {private int x;private String[] y;private List<String> z;private Map<String,String> w;public void setX(int x) {this.x = x;}public void setZ(List<String> z) {this.z = z;}public void setW(Map<String,String> w) {this.w = w;}public void setY(String[] x) {this.y = x;}public void g (){System.out.println(x+","+y+","+z+","+w);} }
此处为我的jh文件
自动注入
<?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"default-autowire="byType"><bean id="dao" class="com.zk.imp.c5dao"></bean><bean id="dao2" class="com.zk.imp.c4dao"></bean><bean id="c4dao" class="com.zk.selv.ceev" autowire="byType"></bean>
这里我自动注入了我的dao类
刚才的方法方法过于麻烦这里我们使用另外的方式
注解
注解是一种特殊的代码标记
@注解名(属性名 = 属性值)
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsd"> <!--注解的代码<context:component-scan base-package="com.zk.dao"/> --> </beans>
@Autowired根据属性类型进行自动装配
@Qualifier根据属性名称进行注入需要和 @Autowired一起使用
@Resource可以根据类型和名称注入
@value根据普通类型注入
package com.zk.dao.img;import com.zk.dao.a1dao; import com.zk.dao.sev; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.stereotype.Component; import org.springframework.stereotype.Service;@Component public class uu implements sev {private a1dao dao;@Autowired@Qualifier(value = "aa1")public void adda1dap(a1dao dao){this.dao=dao;}@Overridepublic void acc() {dao.cc();} }
package com.zk.dao.img;import com.zk.dao.a1dao; import org.springframework.stereotype.Component; import org.springframework.stereotype.Repository;@Component public class aa1 implements a1dao {@Overridepublic void cc() {System.out.println(123);} }
这样即可完成自动注入