Spring 学习
一、Spring体系架构
1、底层核心容器
Bean
Core
Context
SpringEL表达式
2、中间层技术
AOP
Aspects
3、应用层技术
数据访问与数据集成
Web集成
Web实现
4、基于Test测试
二、IOC
1、Spring发展史
2、IOC简介
1、IOC(Inversion Of Control)控制反转,Spring反向控制应用程序所需要使用的外部资源。
2、Spring 控制的资源全部放在Spring容器中,该容器称为IOC容器
3.由主动变被动
3、入门案例
1.加载Spring
2.创建资源
3.配置资源
4.使用资源
4、IOC配置
1.name属性
可以使用 【name】 属性进行对资源定义多个别名,中间用 【,】 号隔开
<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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--注入Bean-->
<!--可以使用 name 进行对资源定义多个别名,中间用 , 号隔开-->
<bean id="userService" name="userService2,userService3" class="com.yaoyao.service.impl.UserServiceImpl"></bean>
</beans>
2.sope属性
不设置值的时候,默认为【singleton】,在加载Spring IOC容器的时候就创建了 对象
当 设置为【prototype】的时候,使用(或者获取Bean)的时候才会创建对象,而且用一次创建一次。
3.bean的生命周期
3.Bean对象的创建方式
4、DL
DL:依赖,应用程序运行依赖的资源由Spring为其提供,资源进入应用程序的方式称为注入。
DL和IOC的关系:同一件事站在不同的角度
5、依赖注入
1.set方法注入
java代码
``
public class UserServiceImpl implements UserService {
private UserDao userDao;
private String name;
private int num;
public void setName(String name) {
this.name = name;
}
public void setNum(int num) {
this.num = num;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void save() {
userDao.save();
System.out.println("userService......running....." + name + " " + num);
}
}
applicationContext.xml
<!--将要注入的资源为Bean-->
<bean id="userDao" class="com.yaoyao.dao.impl.UserDaoImpl"></bean>
<!--将要注入的引用类型的变量通过property属性进行注入,对应的name是要注入的变量名,使用ref属性声明要注入的的bean-->
<bean id="userService" class="com.yaoyao.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"></property>
<property name="name" value="lisi"></property>
<property name="num" value="1235"></property>
</bean>
2.构造方法注入
Java代码:
public class UserServiceImpl implements UserService {
private UserDao userDao;
private String name;
private int num;
public UserServiceImpl(UserDao userDao, String name, int num) {
this.userDao = userDao;
this.name = name;
this.num = num;
}
}
applicationContext.xml
<bean id="userService" class="com.yaoyao.service.impl.UserServiceImpl">
<!--使用构造方法进行set注入,需要保障注入的属性和bean中定义的属性一致,
一致指的的是 顺序一致,类型一致或使用index来解决
-->
<constructor-arg name="userDao" ref="userDao"/>
<constructor-arg name="name" value="zhangsan"/>
<constructor-arg name="num" value="456494"/>
</bean>
报错:
说明 注入的属性类型不正确,或者不一致
6、外部preperties文件的导入
1.设置context的命名空间
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:contesxt="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
2.编写properties配置文件
username=yaoyao
password=123456
3.加载配置文件
<contesxt:property-placeholder location="data.properties"/>
4.设置值
<!--配置bean-->
<bean id="userDao" class="com.yaoyao.dao.impl.UserDaoImpl">
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<bean id="bookDao" class="com.yaoyao.dao.impl.BookDaoImpl"></bean>
<bean id="userService" class="com.yaoyao.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
<property name="bookDao" ref="bookDao"/>
</bean>
5.完整的applicationContext配置
<beans
xmlns="http://www.springframework.org/schema/beans"
xmlns:contesxt="http://www.springframework.org/schema/context"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
">
<!--加载外部的配置文件-->
<contesxt:property-placeholder location="classpath:*.properties"/>
<!--配置bean-->
<bean id="userDao" class="com.yaoyao.dao.impl.UserDaoImpl">
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</bean>
<bean id="bookDao" class="com.yaoyao.dao.impl.BookDaoImpl"></bean>
<bean id="userService" class="com.yaoyao.service.impl.UserServiceImpl">
<property name="userDao" ref="userDao"/>
<property name="bookDao" ref="bookDao"/>
</bean>
</beans>
7、Import的配置
代码
<!--引入其他配置文件-->
<import resource="applicationContext-Book.xml"/>
<import resource="applicationContext-User.xml"/>
8、ApplicationContext的源码解析
**BeanFactory:**getBean的时候才会创建
**ApplicationContext:**采用立即加载的形式,随用随给
9、Spring引入第三方资源–Durid
10、综合案例整合MyBatis
```8、ApplicationContext的源码解析
[外链图片转存中…(img-qVdo24iY-1606985516709)]
**BeanFactory:**getBean的时候才会创建
**ApplicationContext:**采用立即加载的形式,随用随给