介绍
Spring框架是一个开放源代码的J2EE应用程序框架,由Rod Johnson发起,是针对bean的生命周期进行管理的轻量级容器(lightweight container)。
特征:
轻量——从大小与开销两方面而言Spring都是轻量的。
控制反转——Spring通过一种称作控制反转(IoC)的技术促进了低耦合。
面向切面——Spring提供了面向切面编程的丰富支持,允许通过分离应用的业务逻辑与系统级服务(例如审计(auditing)和事务(transaction)管理)进行内聚性的开发。
容器——Spring包含并管理应用对象的配置和生命周期,在这个意义上它是一种容器。
spring将是我们学习编程的开始,同时他也是我们学习的基础。
由于spring不断的更新,新手学习建议先看老版本的官网 中文官网
版本的下载在maven中下载。
IOC控制反转
官方给出的解释
反转控制(IoC)原则的 Spring 框架实现。IoC 也称为依赖项注入(DI)。
在此过程中,对象仅通过构造函数参数,工厂方法的参数或在构造或从工厂方法返回后在对象实例上设置的属性来定义其依赖项(即,与它们一起使用的其他对象) 。
然后,容器在创建 bean 时注入那些依赖项。
此过程从根本上讲是通过使用类的直接构造或诸如服务定位器模式之类的控件来控制其依赖项的实例化或位置的 bean 本身的逆过程(因此称为 Control Inversion)。
说白了ICo就是一个大的容器。这是一种思想,我们通过代码对他进行讲解。
普通项目演示
我们还是通过maven创建一个项目,添加包。
我们这里导入的是spring-webmvc,他里面自带了一些jar省得我们在一个一个的进行导入了。
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.3</version>
</dependency>
这是根据我们以前的格式,在dao层先写一个接口,在写实现类,同样service层一样。
以前我们在service写实现类是这样写的
public class UserServiceImp implements UserService {
private UserDao userDao=new UserDaoImp();
@Override
public void getUserS() {
userDao.getUser();
}
}
如果是我们在换成其他dao层的实现类,那就需要修改事务层的代码,这样是不利于开发和使用的。
我们应该写成一个动态的,重点是哪一个set方法,这个使用来进行对象的。
public class UserServiceImp implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
@Override
public void getUserS() {
userDao.getUser();
}
}
测试类,之前是程序主动创建对象,程序员是控制者,现在添加set方法后是程序被动接受对象,这样程序就不用去创建对象,大大降低了耦合性,这就是ioc的本质。
public class UserTest {
public static void main(String[] args) {
UserServiceImp userServiceImp = new UserServiceImp();
userServiceImp.setUserDao(new UserDaoImp());
userServiceImp.getUserS();
userServiceImp.setUserDao(new UserDaoOracle());
userServiceImp.getUserS();
}
}
Hello World
我们首先是在dao层创建一个实体类,这里的中点是要写他的属性的set方法。
package aw.dao;
public class Hello {
private String str;
public void hello(){
System.out.println(str+"---");
}
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
@Override
public String toString() {
return "Hello{" +
"str='" + str + '\'' +
'}';
}
}
接下来就是写配置文件,我们先在是将它命名为beans.xml。头文件我们可以在官方文档中查找,<bean 标签就相当于实在创建对象,id是变量名,class是实体类。<property 标签同样是属性标签 和mybatis中的一样。
(1) id属性是标识单个 bean 定义的字符串。
(2) class属性定义 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="h" class="aw.dao.Hello">
<property name="str" value="阿威"/>
</bean>
</beans>
测试类
public static void main(String[] args) {
//首先是寻找配置文件的路径
ApplicationContext classPathXmlApplicationContext = new ClassPathXmlApplicationContext("beans.xml");
通过配置文件调用getBean方法,在根据id查找对象,最后调用对象中的方法。
Hello hello = (Hello) classPathXmlApplicationContext.getBean("h");
hello.hello();
}
把我们之前的普通项目编程Spring类型。我们只需要在配置文件中添加几个<bean标签就行。这里要注意ref是引用<beans中的对象就是<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="h" class="aw.dao.Hello">
<property name="str" value="阿威"/>
</bean>
<bean id="getUser" class="aw.dao.UserDaoOracle">
</bean>
<bean id="getUserS" class="aw.service.UserServiceImp">
<property name="userDao" ref="getUser"/>
</bean>
</beans>
这个过程就叫做控制反转:
控制:以前创建对象是程序自身创建的,显示是用spring中的<bean标签创建的。
反转:程序不是主动创建对象,而是被创建。
所谓的依赖注入:就是利用set方法进行注入。
我们就不用再去修改代码,只需要修改配置文件,总结一句话 Spring创建、管理、配置。