目录
创建Spring项目
idea新建项目,在构建系统中选择Maven,即可创建项目
创建完成得到项目结构如下图所示
添加jar包
点击pom.xml文件,导入如下依赖
<dependencies>
<!-- spring 核⼼依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.6.RELEASE</version>
</dependency>
</dependencies>
防止导入其它spring依赖版本不相同从而造成项目运行错误,可以采用如下方式同一版本
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring.version>5.2.6.RELEASE</spring.version>
</properties>
<dependencies>
<!-- spring 核⼼依赖 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
</dependencies>
创建xml配置文件
在resource目录下新建spring配置文件
spring管理service和dao
在项目中创建service和dao
在xml配置文件写入如下内容
<!-- bean标签:⽤于配置让spring创建对象,并且存⼊ioc容器之中
id 属性:对象的唯⼀标识。
class 属性:指定要创建对象的全限定类名
-->
<!-- 配置 service -->
<bean id="UserService" class="com.spring.service.impl.UserServiceImpl"/>
<!-- 配置 dao -->
<bean id="UserDao" class="com.spring.dao.impl.UserDaoImpl"/>
测试
@Test
public void test1(){
// 1.使⽤ ApplicationContext 接⼝,就是在获取 spring 容器
ApplicationContext ac = new ClassPathXmlApplicationContext("application.xml");
// 2.根据 bean 的 id 获取对象
UserService userService = (UserService) ac.getBean("UserService");
System.out.println(userService);
UserDao userDao = (UserDao) ac.getBean("UserDao");
System.out.println(userDao);
}
得到运行结果如下,配置成功
bean标签
作用
用于配置对象让spring来创建的。
默认情况下它调用的是类中的无参构造器。如果没有无参构造器则不能创建成功。
属性
id:给对象在容器中提供唯一标识。用于获取对象。
class:指定类的全限定类名。用于反射创建对象。默认情况下调用无参构造器。
scope:指定对象的作业范围。
singleton:默认值,单例的。
prototype:多例的。
init-method:指定类中初始化方法名称。
destroy-method:指定类中销毁方法名称。
作用范围生命周期
单例对象:scope=“singleton”
一个应用只有一个对象实例。它的作用范围是整个应用。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要容器在,对象一直活着。
对象死亡:当应用卸载,销毁容器时,对象就销毁。
多例对象:scope=“prototype”
每次访问对象时,都会重新创建新的对象实例。
生命周期:
对象出生:当使用对象时,创建新的对象实例。
对象活着:只要对象在使用,就一直活着。
对象死亡:当对象长时间不用时,被java的垃圾回收器回收。
bean实例化
默认无参构造器
<!-- 在默认情况下:
它会根据默认⽆参构造函数来创建类对象。如果 bean 中没有默认⽆参构造函数,将会创建失败。
-->
<bean id="UserService" class="com.spring.service.impl.UserServiceImpl"/>
静态工厂
/**
* 模拟⼀个静态⼯⼚,创建业务层实现类
*/
public class staticFactory {
public static UserService createUserService(){
return new UserServiceImpl();
}
}
<!-- 此种⽅式是:
使⽤ StaticFactory 类中的静态⽅法 createAccountService 创建对象,并存⼊ spring 容
器
id 属性: 指定 bean 的 id,⽤于从容器中获取
class 属性: 指定静态⼯⼚的全限定类名
factory-method 属性: 指定⽣产对象的静态⽅法
-->
<bean id="UserService" class="com.spring.factory.staticFactory" factory-method="createUserService"/>
spring实例管理工厂
/**
* 模拟⼀个实例⼯⼚,创建业务层实现类
* 此⼯⼚创建对象,必须现有⼯⼚实例对象,再调⽤⽅法
*/
public class InstanceFactory {
public UserService createUserService(){
return new UserServiceImpl();
}
}
<!-- 此种⽅式是:
先把⼯⼚的创建交给 spring 来管理。
然后在使⽤⼯⼚的 bean 来调⽤⾥⾯的⽅法
factory-bean 属性: ⽤于指定实例⼯⼚ bean 的 id。
factory-method 属性: ⽤于指定实例⼯⼚中创建对象的⽅法。
-->
<bean id="instanceFactory" class="com.spring.factory.InstanceFactory"/>
<bean id="accountService" factory-bean="instanceFactory" factory-method="createUserService"/>
spring依赖注入
在项目中创建bean目录,并添加user类,定义构造方法和set方法。
构造函数注入
<!-- 使⽤构造函数的⽅式,给 user 中的属性传值
要求:
类中需要提供⼀个对应参数列表的构造函数。
涉及的标签:
constructor-arg
属性:
index: 指定参数在构造函数参数列表的索引位置
type: 指定参数在构造函数中的数据类型
name: 指定参数在构造函数中的名称 ⽤这个找给谁赋值
===上⾯三个都是找给谁赋值,下⾯两个指的是赋什么值的===
value: 它能赋的值是基本数据类型和 String 类型
ref: 它能赋的值是其他 bean 类型,也就是说,必须得是在配置⽂件中配置过的 bean
-->
<bean id="user" class="com.spring.bean.User">
<constructor-arg name="name" value="张三"/>
<constructor-arg name="age" value="18"/>
<constructor-arg name="birthday" ref="now"/>
</bean>
<bean id="now" class="java.util.Date"/>
set方法注入
<!-- 通过配置⽂件给 bean 中的属性传值: 使⽤ set ⽅法的⽅式
涉及的标签:
property
属性:
name: 找的是类中 set ⽅法后⾯的部分
ref: 给属性赋值是其他 bean 类型的
value: 给属性赋值是基本数据类型和string类型的-->
<bean id="user" class="com.spring.bean.User">
<property name="name" value="test"/>
<property name="age" value="21"/>
<property name="birthday" ref="now"/>
</bean>
<bean id="now" class="java.util.Date"/>
p名称空间注入数据
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:p="http://www.springframework.org/schema/p"
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.spring.bean.User"
p:name="test" p:age="21" p:birthday-ref="now"/>
<bean id="now" class="java.util.Date"/>
</beans>