Spring的入门学习。
一句话概括:Spring是一个轻量级的控制反转(IoC)和面向切面(AOP)的容器(框架)。
以下内容摘自秦老师的博客:
组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
BeanFactory
,它是工厂模式的实现。BeanFactory
使用控制反转(IOC) 模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.0.RELEASE</version>
</dependency>
通常的web项目都是写一个接口,然后根据需求写实现类,当需求改变时,需要改动程序来满足需求,但是这样的成本比较大,而Spring通过控制反转,将对象的实例化的控制权给到用户手中,用户需要什么对象在xml中配置即可。
实例:获取用户信息。
dao
UserDao
package com.nevesettle.dao;
public interface UserDao {
void getUser();
}
UserDaoImp
package com.nevesettle.dao;
public class UserDaoImp implements UserDao {
public void getUser() {
System.out.println("默认获取用户信息");
}
}
UserDaoMysqlImp
package com.nevesettle.dao;
public class UserDaoMysqlImp implements UserDao{
public void getUser() {
System.out.println("Mysql实现获取用户信息");
}
}
Service
UserService
package com.nevesettle.service;
public interface UserService {
void getUser();
}
UserServiceImp
package com.nevesettle.service;
import com.nevesettle.dao.UserDao;
public class UserServiceImp implements UserService {
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
此时需要哪个具体的实现类不指定,不让程序来实例化对象,而是由用户来给程序指定生成哪个实现类,从而实现了控制反转。
xml配置文件(在resources中创建)
<?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.nevesettle.pojo.Hello">
<property name="name" value="Spring"/>
</bean>
<bean id="userdao" class="com.nevesettle.dao.UserDaoImp"/>
<bean id="mysqlDao" class="com.nevesettle.dao.UserDaoMysqlImp"/>
<bean id="userService" class="com.nevesettle.service.UserServiceImp">
<!-- ref的引用哪个对象-->
<property name="userDao" ref="mysqlDao"/>
</bean>
</beans>
test
import com.nevesettle.dao.UserDaoImp;
import com.nevesettle.service.UserService;
import com.nevesettle.service.UserServiceImp;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
public class MyTest {
public static void main(String[] args){
//获取上下文,第一步
ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");
//获取对象,获取什么对象就在getBean中传入对象的名称,然后再强转
UserService userService = (UserService) context.getBean("userService");
userService.getUser();
}
}
此时就会输出:
Mysql实现获取用户信息
因为在配置文件中配置的是mysqlDao实现类,所以执行的是mysqlDao的方法,当需求改变时,程序无需做出更改,只需要在配置文件中将引用改为其他的实现类即可,这便是Ioc。
原文:https://www.cnblogs.com/wuren-best/p/12441462.html