前言:到目前为止已经学完了Spring框架,然后这里给自己所学的知识来个小总结,便于日后复习。
编写环境基于idea。
Spring的概述
什么是Spring
- Spring:SE/EE开发的一站式框架。
-
一站式框架:有EE开发的每一层解决方案。
- WEB层 :SpringMVC
- Service层 :Spring的Bean管理,Spring声明式事务
- DAO层 :Spring的Jdbc模板,Spring的ORM模块
-
Spring的入门(IOC)
- IOC: Inversion of Control(控制反转)。
- 控制反转:将对象的创建权反转给(交给)Spring。
解压Spring的开发包
- docs :Spring的开发规范和API。
- libs :Spring的开发的jar和源码
- schema :Spring的配置文件的约束
创建一个Web项目,引入jar包
前两个是日志包
- spring-beans-4.2.4.RELEASE.jar:所有应用都要用到的JAR包,它包含访问配置文件、创建和管理Bean以及进行IOC或者DI操作相关的所有类(IOC和DI后面会讲的)。
- spring-core-4.2.4.RELEASE.jar:包含Spring框架基本的核心工具,是其他组件的基本核心。
- spring-context-4.2.4.RELEASE.jar:提供了在基础IOC功能上的扩展服务。
- spring-expression-4.2.4.RELEASE.jar:定义了Spring的表达式语言.
创建接口类
package com.lzhui.Dao;
public interface UserDao {
public void say();
}
package com.lzhui.impl;
import com.lzhui.Dao.UserDao;
public class UserDaoImpl implements UserDao {
@Override
public void say() {
//打印一句话
System.out.println("4 UserDaoImpl say执行了。。。");
}
}
传统方式就是在测试类中实例化接口然后调用它的方法,这里我们不做示范了,直接来看Spring是如何玩的。
将实现类交给Spring来管理
创建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">
<!--Spring的入门配置========================-->
<bean id="UserDao" class="com.lzhui.impl.UserDaoImpl"/>
</beans>
编写测试类
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
//getBean()中的UserDao 必须与配置文件bean中的id保持一致
UserDao userdao=(UserDao ) applicationContext.getBean("UserDao ");
userdao.say();
就可以调用UserDao的方法啦~。
IOC和DI
IOC:控制反转,将对象的创建权反转给了Spring。(简单的理解为这样,我就不用官方的说法了)
DI:依赖注入,前提必须有IOC的环境,Spring管理这个类的时候将类的依赖的属性注入(设置)进来。
Spring的工厂类
工厂类的结构图
ApplicationContext继承BeanFactory。
BeanFactory :老版本的工厂类
- BeanFactory:调用getBean的时候,才会生成类的实例
ApplicationContext :新版本的工厂类
- ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化。
- ApplicationContext有两个实现类。
1.ClassPathXmlApplicationContext :加载类路径下的配置文件
2.FileSystemXmlApplicationContext :加载文件系统下的配置文件
依赖注入的实现方式
拿上面的例子稍加修改
第一步创建接口(创建项目引入jar包就省略了)
package com.lzhui.Dao;
public interface UserDao {
public void say();
}
package com.lzhui.impl;
import com.lzhui.Dao.UserDao;
public class UserDaoImpl implements UserDao {
public UserDaoImpl() {
System.out.println("1 UserDaoImpl构造执行了。。。");
}
@Override
public void say() {
System.out.println("4 UserDaoImpl say执行了。。。");
}
}
创建一个UserService 接口
package com.lzhui.Dao;
public interface UserService {
public void say();
}
在UserService 中用UserDao 接口的方法,所以定义一个UserDao 并设置set方法
package com.lzhui.impl;
import com.lzhui.Dao.UserDao;
import com.lzhui.Dao.UserService;
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
System.out.println("3 UserServiceImpl set方法执行了。。。");
this.userDao = userDao;
}
public UserServiceImpl() {
System.out.println("2 UserServiceImpl构造执行了...");
}
@Override
public void say() {
this.userDao.say();
System.out.println("5 UserServiceImpl 执行了。。。。");
}
}
编写配置文件
是元素的子元素,它用于调用Bean实例中的setUserDao()方法完成属性赋值,从而实现依赖注入。name属性表示Bean实例中的相应属性名(此例中指UserServiceImpl中的UserDao)ref属性用于指定其属性值(如果是基本类型则用value,对象类型用ref)
<?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="UserDao" class="com.lzhui.impl.UserDaoImpl"/>
<bean id="UserService" class="com.lzhui.impl.UserServiceImpl">
<property name="userDao" ref="UserDao"></property>
</bean>
</beans>
编写测试类
package com.lzhui.text;
import com.lzhui.Dao.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
/**
* Spring依赖注入
*/
public class text {
public static void main(String[] args) {
text t=new text();
t.dome1();
}
public void dome1(){
ApplicationContext applicationContext=new ClassPathXmlApplicationContext("applicationContext.xml");
UserService userService=(UserService) applicationContext.getBean("UserService");
userService.say();
}
}
测试结果
由测试可以得知ApplicationContext:加载配置文件的时候,就会将Spring管理的类都实例化,所以按配置文件从上到下的顺序先执行UserDaoImpl构造,然后执行UserServiceImpl构造,第三执行UserServiceImpl 里的set方法,其次再按顺序执行UserDaoImpl say方法,最后执行剩下的语句
好啦Spring的入门先简单写到这里啦
总结知识点: