Spring简介:
一、MVC(结构):Model(数据层) View(显示层) Controller(控制层)
Spring就是一个轻量级的大杂烩,可以集成管理java中的总多框架
Spring-IOC:Dl(依赖注入) (控制反转) :管属性
AOP (面向切面编程) : 管方法
Spring可以完全代理整个类
二、Spring的优势
1.方便解耦,简化开发:
(1)耦合:程序之间的耦合性就是对象和java类之间联系太过于精密
(2)解耦:就是在创建对象时不使用new关键字(不去导入包名)
(*)但是:程序之间的耦合只有降低,不能完全清除
三、Spring的IOC
IOC:控制反转,将对象的创建过程改为spring框架控制;
创建一个maven项目,删除src,新建一个module,命名为Java-pro
(1)、在子类项目Java-pro中导入pom文件坐标
<dependencies>
<!-- 测试的-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<!--maven插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
<!--加载src目录下的静态文件-->
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
(2)、在resources目录下——>右键——>new——>XML Configuration File——>Spring Config
(3)、使用spring IOC实例化对象
<?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">
<!--使用spring IOC实例化对象
以下过程相当于UserDao userDao = new UserDao();
id指向要创建的对象名,class指向该对象的类地址
-->
<bean id="userDao" class="com.gyy.dao.UserDao"></bean>
<!--创建user对象-->
<bean id="user" class="com.gyy.dao.User"></bean>
</beans>
(4)、在测试类中进行测试(创建对象的过程)
import com.gyy.dao.User;
import com.gyy.dao.UserDao;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class UserTest {
@Test
public void showUser(){
//通过springIOC管理bean
//读取spring-config.xml(有三种方式)
//当前使用ClassPathXmlApplicationContext:使用它去读取配置文件时就已经创建好了对象
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//取出IOC容器的getBean对象
//getBean里面写xml对应的id
UserDao userDao = (UserDao)applicationContext.getBean("userDao");
User user = (User)applicationContext.getBean("user");
}
}
注:读取spring-config.xml的三种方式
ClassPathXmlApplicationContext:加载类路径下的配置文件,要求配置文件必须在类路径下(常用)
FileSystemXmlApplicationContext:加载磁盘任意路径下的配置文件(必须有访问权限)
AnnotationConfigAppiicationconitex划读取注解配置容器
第二种方法:FileSystemXmlApplicationContext
import org.springframework.beans.factory.xml.XmlBeanFactory;
Resource resource = new ClassPathResource("spring-config.xml");
BeanFactory beanFactory = new XmlBeanFactory(resource);
UserDao UserDao = (UserDao)beanFactory.getBean("userDao");
四、Spring IOC的 DI依赖注入(1.构造器注入;2.通过set注入;3.通过注解注入)
(1)、在子类项目中导入pom文件坐标
<dependencies>
<!-- 测试的-->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
</dependency>
<!--Spring -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.0.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<!--maven插件-->
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
</plugin>
</plugins>
<!--加载src目录下的静态文件-->
<resources>
<resource>
<directory>${basedir}/src/main/java</directory>
<includes>
<include>**/*.xml</include>
</includes>
</resource>
<resource>
<directory>${basedir}/src/main/resources</directory>
</resource>
</resources>
</build>
(2)、模拟操作——>创建User类
public class User {
public String userName;
public String sex;
public int age;
//该构造方法是为了xml文件中name的使用
public User(String userName, String sex, int age) {
this.userName = userName;
this.sex = sex;
this.age = age;
}
}
(3)、通过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="user" class="com.gyy.pojo.User">
<!--使用构造方法为属性赋值 name指向有参构造方法 value:要赋的值-->
<constructor-arg name="userName" value="小宝贝"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
<constructor-arg name="sex" value="仙女"></constructor-arg>
</bean>
</beans>
(4)、测试是否成功
import com.gyy.pojo.User;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
@org.junit.Test
public void Tset(){
//读取配置文件信息
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//从IOC容器中读取出来
User user = (User) applicationContext.getBean("user");
System.out.println(user.userName+user.age+user.sex);
}
}
测试结果:
小宝贝18仙女 Process finished with exit code 0
第二种:通过set函数给属性赋值
(1)、模拟操作——>创建UserSet类
public class UserSet {
private String userName;
private String sex;
private int age;
public String getUserName() {
return userName;
}
public String getSex() {
return sex;
}
public int getAge() {
return age;
}
public void setUserName(String userName) {
this.userName = userName;
}
public void setSex(String sex) {
this.sex = sex;
}
public void setAge(int age) {
this.age = age;
}
}
(2)、在xml文件中通过set函数赋值
<!--第二种:通过set函数赋值-->
<bean id="userset" class="com.gyy.pojo.UserSet">
<property name="userName" value="小仙女"></property>
<property name="sex" value="大美女"></property>
<property name="age" value="18"></property>
</bean>
(3)、测试是否成功
import com.gyy.pojo.UserSet;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class Test {
@org.junit.Test
public void Tset(){
//读取配置文件信息
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//从IOC容器中读取出来
UserSet userSet = (UserSet) applicationContext.getBean("userset");
System.out.println(userSet.getUserName()+userSet.getSex()+userSet.getAge());
}
}
测试结果
小仙女大美女18 Process finished with exit code 0
*、特别说明1
(1)、新建user1类
import java.util.Date;
public class User1 {
private Date date;
public Date getDate() {
return date;
}
public void setDate(Date date) {
this.date = date;
}
}
(2)、通过xml文件引用data
<!--我们去赋值只能付基本数据类型和string,而我们的对象需要去引用
对象之间的耦合
-->
<!--第一步:实例化对象-->
<bean id="dateTime" class="java.util.Date"></bean>
<!--第二步:引用对象,只能通过ref指向-->
<bean id="user1" class="com.gyy.pojo.User1">
<!-- 这里为对象属性赋值只能通过ref指向-->
<property name="date" ref="dateTime"></property>
</bean>
*、特别说明1
(1)、新建Array类
import java.util.List;
import java.util.Map;
import java.util.Set;
public class Array {
private List<String> list;
private Set<String> set;
private Map<String,String> map;
public void setList(List<String> list) {
this.list = list;
}
public void setSet(Set<String> set) {
this.set = set;
}
public void setMap(Map<String, String> map) {
this.map = map;
}
public List<String> getList() {
return list;
}
public Set<String> getSet() {
return set;
}
public Map<String, String> getMap() {
return map;
}
}
(2)、通过xml文件给集合赋值
<!--使用IOC实例化集合-->
<bean id="array" class="com.gyy.pojo.Array">
<!--注入list-->
<property name="list">
<list>
<value>视频呀</value>
<value>想宝宝</value>
<value>代码呀</value>
</list>
</property>
<property name="map">
<map>
<entry key="aa" value="AA"></entry>
<entry key="bb" value="BB"></entry>
<entry key="cc" value="CC"></entry>
</map>
</property>
<property name="set">
<set>
<value>想你哦</value>
<value>在每个日夜</value>
</set>
</property>
</bean>
(3)、测试
import com.gyy.pojo.Array;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.Map;
import java.util.Set;
public class Test {
@org.junit.Test
public void Tset(){
//读取配置文件信息
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("spring-config.xml");
//从IOC容器中读取出来
Array array = (Array)applicationContext.getBean("array");
//遍历
for (String list:array.getList()){
System.out.println(list);
}
Map<String, String> map = array.getMap();
System.out.println(map.get("aa"));
System.out.println("*******************");
Set<String> set = array.getSet();
for (String s:set
) {
System.out.println(set);
}
}
}
测试结果
视频呀 想宝宝 代码呀 AA ******************* [想你哦, 在每个日夜] [想你哦, 在每个日夜] Process finished with exit code 0
结语:技术无他,唯有熟尔,知其然,也知其所以然!
文章连载中…