1、Spring是轻量级的开源的javaEE框架
2、Spring可以解决企业级应用开发的复杂性
3、Spring有俩个核心部分:IOC (控制反转)和AOP(面向切面)
(1) IOC:控制反转,对象的创建过程由Spring管理,降低耦合性
(2) AOP:面向切面,添加功能时,不用修改源码就能进行功扩展;
4、Spring的特点:
(1) 便于解耦,简化开发
(2) 支持AOP编程
(3) 方便程序测试
(4) 方便进行事务的管理
(5) 便于和其他框架的整合
(6) 降低API的开发难度
5.Spring初步使用需要的jar包
(1)IOC的基本jar包
链接:https://pan.baidu.com/s/1V5K23Z5utA6u4RG3dD9o_w
提取码:ing2
6.代码演示
(1)使用xml配置文件的方式创建对象: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">
<!--配置Uesr对象创建:方式一-->
<!-- <bean id="user" class="com.at.spring5.User"></bean> -->
</beans>
说明:id的值可以随意取,当创建ClassPathXmlApplication的实例时,用其引用调用getBean方法时的参数需要id的值;
//被测试类
public class User {
public void add() {
System.out.println("hello world");
}
}
//测试类
package com.at.spring5.junit;
import com.at.spring5.User;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* @author tao
* @version 1.0
* @date 2020-06-23 19:14
* @description Spring入门演示:使用xml配置文件的方式创建对象
* 1.ApplicationContext: 是Beanfactory的一个子接口,功能更丰富;
* 2.Applicationcontext的俩个重要实现类:(1)ClassPathXmlApplicationContext,用于加载类路径(src)下文件,
* (2)FileSystemXmlApplicationContext.用于加载带盘符的文件。
* 3.
*/
public class UserTest {
@Test
public void testAdd(){
//1.加载spring的配置文件
ApplicationContext context =
new ClassPathXmlApplicationContext("bean1.xml");
//BeanFactory context1 =
// new ClassPathXmlApplicationContext("bean1.xml");
//2.获取配置创建的对象
User user = context.getBean("user", User.class);
System.out.println(user);
user.add();
}
}
测试结果:
(2)使用xml配置文件注入属性:property标签调用属性set方法注入属性
①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">
<!--配置Uesr对象创建:方式一-->
<!-- <bean id="user" class="com.at.spring5.User"></bean>-->
<!--配置Book对象创建:方式二-->
<bean id="name" class="com.at.spring5.Book">
<property name="bname" value="射雕英雄传"></property>
<property name="bauthor" value="金庸"></property>
</bean>
</beans>
②被测试类:
package com.at.spring5;
/**
* @author tao
* @version 1.0
* @date 2020-06-23 21:08
* @description
*/
public class Book {
private String bname;
private String bauthor;
public void setBname(String bname) {
this.bname = bname;
}
public void setBauthor(String bauthor) {
this.bauthor = bauthor;
}
public void sout(){
System.out.println(bname+"::"+bauthor);
}
}
③测试类:
package com.at.spring5.junit;
import com.at.spring5.Book;
import com.at.spring5.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.Assert.*;
/**
* @author tao
* @version 1.0
* @date 2020-06-23 21:10
* @description 测试spring中注入属性:
* (1)通过调用属性的set方法来注入属性
* (2)通过构造方法来注入属性
*/
public class BookTest {
//通过调用属性的set方法来注入属性
@Test
public void sout() {
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
Book book = context.getBean("name", Book.class);
System.out.println(book);
book.sout();
}
}
④测试结果:
(3)使用xml配置文件注入属性:constructor-arg标签调用有参构造注入属性
①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">
<!--配置Uesr对象创建:方式一-->
<!-- <bean id="user" class="com.at.spring5.User"></bean>-->
<!--配置Book对象创建:方式二-->
<!-- <bean id="name" class="com.at.spring5.Book">-->
<!-- <property name="bname" value="射雕英雄传"></property>-->
<!-- <property name="bauthor" value="金庸"></property>-->
<!-- </bean>-->
<!--配置Book对象创建:方式三,Spring创建对象时默认调用的是无参构造方法,使用有参构造时,参数配置完后,错误消失-->
<bean id="name" class="com.at.spring5.Person">
<constructor-arg name="pname" value="郭靖"></constructor-arg>
<constructor-arg name="age" value="18"></constructor-arg>
</bean>
</beans>
②被测试类
package com.at.spring5;
public class Person {
public Person(String pname, int age) {
this.pname = pname;
this.age = age;
}
private String pname;
private int age;
public void sout(){
System.out.println(pname+"::"+age);
}
}
③测试类
package com.at.spring5.junit;
import com.at.spring5.Person;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import static org.junit.Assert.*;
public class PersonTest {
//通过构造方法来注入属性
@Test
public void sout(){
ApplicationContext context = new ClassPathXmlApplicationContext("bean1.xml");
Person person = context.getBean("name", Person.class);
System.out.println(person);
person.sout();
}
}
(1)在 spring 配置文件中,使用 bean 标签,标签里面添加对应属性,就可以实现对象创建
(2)在 bean 标签有很多属性,介绍常用的属性
(3)创建对象时候,默认也是执行无参数构造方法完成对象创建
(4)配置文件中property标签调用属性set方法注入属性
(5)配置文件中constructor-arg标签调用有参构造注入属性
2、IOC的概括
2.1、IOC 思想基于 IOC 容器完成,IOC 容器底层就是对象工厂
2.2、Spring 提供 IOC 容器实现两种方式:(两个接口)
(1)BeanFactory:IOC 容器基本实现,是 Spring 内部的使用接口,不提供开发人员进行使用
(2)ApplicationContext:BeanFactory 接口的子接口,提供更多更强大的功能,一般由开发人
员进行使用