结束了Mybatis框架的学习,这几天开始接触Spring框架,每天学习完,差不多在十点之后都会写个博文来记录复盘今天的所学,也顺便整理加深印象。
什么是Spring框架?
Spring框架是为了解决软件开发的复杂性而创建的,其使用基本的JavaBean来完成以前只能由EJB完成的事情。其适用范围是任何的Java应用。Spring是一个轻量级控制反转(IOC)和面向切面(AOP)的容器框架。
Spring有哪些优点?
- Spring是一个开源的免费框架(容器)
- Spring是一个轻量级,非侵入式的框架
- 控制反转,面向切面编程
- 支持事物的处理,对框架整合的支持
下面做个实例演示,看看传统开发模式和使用Spring框架后的开发有什么不同
传统开发大体结构如下:
dao层的一个 接口是:
public interface UserDao {
void getUser();
}
实现dao接口的一个类:
public class UserDaoimpl implements UserDao {
@Override
public void getUser() {
System.out.println("获取用户的数据");
}
}
service业务层接口:
public interface UserService {
void getUser();
}
实现service层接口的一个类:
public class UserServiceImpl implements UserService {
private UserDao userDao=new UserDaoimpl
@Override
public void getUser() {
userDao.getUser();
}
}
测试:
public void Test1() {
UserServiceImpl userService = new UserServiceImpl();
userService.getUser();
}
结果是
========================================================
现在我们要给上面的dao接口增加一个 实现类
public class UserDaoMysqlImpl implements UserDao {
@Override
public void getUser() {
System.out.println("MySql获取用户数据");
}
}
当我们想在测试类中调用这个实现类的时候,你会发现我们还要把下面的标记处代码修改
从中我们可以看到,在原有的业务中,在增加新的需求的时候很有可能会影响到原来的代码,进而还得根据需求修改原有的代码,如果程序很大,那么修改起来是一个很费时,成本还挺大的事情。
现在,我们尝试将上面业务层的一个实现类做下修改,增加一个set方法,如下
public class UserServiceImpl implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUser() {
userDao.getUser();
}
}
然后新的测试方法如下:(利用Set进行动态实现值注入)
@Test
public void Test1() {
// 用户实际调用的是业务,Dao层不需要接触
UserServiceImpl userService = new UserServiceImpl();
// userService.setUserDao(new UserDaoimpl());
userService.setUserDao(new UserDaoMysqlImpl());
userService.getUser();
}
当我们再增加的一个dao实现类的时候,原有的业务层就不用动了。这样,之前是程序主动创建对象,控制权在程序员手上,而使用了set注入后,程序不在具有主动性,变成了被动的接受对象。这种思想,从本质上解决了问题,让程序员不用再去管理对象的创建,可以更加专注在业务的实现上。
我的第一个spring入门案例:
首先是创建maven项目,然后在pom.xml里导入依赖:
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.9</version>
</dependency>
创建实体类:
public class Hello {
private String name;
public void show() {
System.out.println("hello"+name);
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
在resources目录下创建beans.xml (id是bean的唯一标识,class是实体类的全限定名)
<?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">
<!--使用spring创建对象-->
<bean id="hello" class="com.ys.pojo.Hello">
<property name="name" value="spring"/>
</bean>
</beans>
测试
@Test
public void Test1() {
// 获取spring的上下文对象
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
// 我们的对象都在spring中的管理了
Hello hello = (Hello) context.getBean("hello");
hello.show();
}
运行结果:
使用spring后,我们就不用再去程序中改动原有代码了,要实现不同的操作,只需在xml配置文件中进行修改,这就实现了控制反转IOC
控制:谁来控制对象的创建,传统应用程序的对象有程序本身来控制创建,使用Spring后,对象有spring来创建
反转:程序本身不创建对象,而变成被动的接收对象
依赖注入:即利用Set方法进行注入
总之,IOC即对象由Spring来创建吗,管理和装配!
O(∩_∩)O哈哈~ 觉得不错三连支持一下哦,有不对的地方欢迎指正!!!