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/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://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; } @Override public 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 { @Override public void cc() { System.out.println(123); } }
这样即可完成自动注入