简介
Spring是一个开源免费框架。
是一个轻量级的、非入侵式的框架。
控制反转IOC和面相切面编程AOP。
支持事务处理,对框架整合的支持。
组成
Spring Core
Spring AOP
Spring DAO
Spring ORM
Spring Web
Spring Context
Spring Web MVC
IOC理论推导
原本开发:
UserDao接口
public interface UserDao {
void getUser();
}
->UserDaoImpl实现类
public class UserDaoImpl implements UserDao{
@Override
public void getUser() {
System.out.println("impl");
}
}
->UserService业务接口
public interface UserService {
void getUser();
}
->UserServiceImpl业务实现类
public class UserServiceImpl implements UserService{
private UserDao userDao = new UserDaoImpl();
@Override
public void getUser() {
userDao.getUser();
}
}
之前业务中,用户需求可能影响原有代码即修改源代码。
原本实现方式:
private UserDao userDao = new UserDaoImpl();
改为使用:
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
改为set注入后,程序变为被动接收对象。
程序员只需要设计接口,不用考虑具体对象创建,实现解耦,能更专心在业务实现上。
IOC本质
控制反转实际就是获得依赖对象的方式反转了,由原本代码业务层规定实现转为用户传参决定实现。
控制反转是一种通过描述(XML、注解)并通过第三方生产或获取特定对象的方式。在Spring中实现控制翻转的是Ioc容器,其实现方式的依赖注入DI
第一个项目
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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="hello" class="com.lms.pojo.Hello">
<property name="str" value="String"/>
</bean>
</beans>
bean内部对应一个对象,id对应对象名,class对应实体类,property对应类中成员及参数设置。
对象获取
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("beans.xml");
Hello hello = (Hello) applicationContext.getBean("hello");
依据Spring对先前项目进行Spring托管:
<bean id="UserImpl" class="com.lms.dao.UserDaoImpl"/>
<bean id="UserServiceImpl" class="com.lms.service.UserServiceImpl">
<property name="userDao" ref="UserImpl"/>
</bean>
在配置中注册Bean,在property中,ref用于指向Spring生成的对象,value用于基本数据类型成员
若有新的UserImpl,直接在xml配置中注册新实现,绑定关系也只需在xml中修改。
IOC创建对象方式
①默认使用无参构造创建对象
②有参构造:
a.使用下标注入:
<bean id="user" class="com.lms.pojo.User">
<constructor-arg index="0" value="params"/>
</bean>
b.通过参数类型注入:
<bean id="user" class="com.lms.pojo.User">
<constructor-arg type="java.lang.String" value="params"/>
</bean>
但当两个参数类型相同,比较麻烦
c.通过参数名注入:
<bean id="user" class="com.lms.pojo.User">
<constructor-arg name="name" value="params"/>
</bean>
注:Spring在读取配置文件时,就已经通过构造方法将bean创建好了。
配置说明
别名
<alias name="user" alias="u"/>
User user = (User) applicationContext.getBean("u");
可以使用别名获取bean
bean配置
id、class上述都有描述,额外有属性配置:
name:别名,可以同时取多个别名
scope:单例、多例
import
用于团队开发使用,将多个配置文件导入合并为一个。
在一个xml配置文件A导入另一个B,在代码中读取A配置文件即可同时得到B的配置信息。
<import resource="beans.xml"/>