摘要:Spring笔记_03-2021-06-27
1.Spring官方文档
地址:
https://docs.spring.io/spring-framework/docs/5.2.0.RELEASE/spring-framework-reference/core.html#spring-core
2.配置Spring
2.1 导入依赖
**Repository:**https://mvnrepository.com/search?q=Spring
1.Spring Web MVC:这个包下囊括了我们所需要的依赖,引入这一个就不用一个个去依赖,包含:
pom.xml
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.8</version>
</dependency>
2.Spring JDBC:进行Spring + Mybatis整合时,需要导入依赖
<!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.3.8</version>
</dependency>
2.2 容器(applicationContext.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<bean id="..." class="...">
<!-- collaborators and configuration for this bean go here -->
</bean>
<!-- more bean definitions go here -->
</beans>
4.通过容器生成(new)对象
1.编写实体类Pojo.java
package com.riove.pojo;
/**
* @Author Riove
* @Create 2021/6/27 14:09
*/
public class User {
private int id;
private String username;
private String password;
public User() {
}
public User(int id, String username, String password) {
this.id = id;
this.username = username;
this.password = password;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.编写接口userDao和实现类userDaoImpl、userDaoImpl2、userDaoImpl3
package com.riove.dao;
public interface UserDao {
void getUser();
}
package com.riove.dao;
public class UserDaoImpl implements UserDao{
public void getUser() {
System.out.println("SqlServer数据库!");
}
}
package com.riove.dao;
public class UserDaoImpl2 implements UserDao{
public void getUser() {
System.out.println("MySql数据库!");
}
}
package com.riove.dao;
public class UserDaoImpl3 implements UserDao{
public void getUser() {
System.out.println("Oracle数据库!");
}
}
3.编写接口userService和实现类userServiceImpl
package com.riove.service;
import com.riove.dao.UserDao;
public interface UserService {
void getUser();
void setUserDao(UserDao userDao);
}
package com.riove.service;
import com.riove.dao.UserDao;
public class UserServiceImpl implements UserService{
//1.通过工厂模式的思想,我们可以在Service层定义一个类型为:UserDao 变量名:userDao
private UserDao userDao;
//2.重点,IOC注入的方式,通过1)Setter 2)构造方法注入 3)字段注入
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void getUser() {
userDao.getUser();
}
}
4.Spring容器applicationContext.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
https://www.springframework.org/schema/beans/spring-beans.xsd">
<!--一般实例对象过程:
类名 标识符 = new 类名();
User user = new User();
user.setId();
user.setUsername(); set方式注入
user.setPassword(); set方式注入
-->
<!--容器:
class id = bean class id:创建的对象 bean==new class:具体为哪个对象
property:name value 本质:set方式注入
1.通过bean标签创建对象对象:
2.id:自定义属性值
3.class:创建对象所属全限类名
4.通过property标签对属性赋值:
5.name:该类中对应属性
6.value:赋值
-->
<!--属性-->
<bean id="user" class="com.riove.pojo.User">
<property name="id" value="1"/>
<property name="username" value="admin"/>
<property name="password" value="123456"/>
</bean>
<!--多个对象及方法注入-->
<!--下列:
相当于new了三个对象,分别为:UserDaoImpl、UserDaoImpl2、UserDaoImpl3
-->
<bean id="UserDaoImpl" class="com.riove.dao.UserDaoImpl"/>
<bean id="UserDaoImpl2" class="com.riove.dao.UserDaoImpl2"/>
<bean id="UserDaoImpl3" class="com.riove.dao.UserDaoImpl3"/>
<bean id="UserServiceImpl" class="com.riove.service.UserServiceImpl">
<!--ref:引用Spring容器中创建好的对象-->
<property name="userDao" ref="UserDaoImpl"/>
</bean>
</beans>
5.测试
package com.riove.pojo;
import com.riove.service.UserService;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
/**
* @Author Riove
* @Create 2021/6/27 14:13
*/
public class PojoTest {
/**
* @Description 测试属性
* @Param []
* @return void
*/
@Test
public void test() {
/**
*获取上下文方式:配置文件.xml、File文件、注解Annotation
* 1.获取容器(applicationContext.xml)的上下文
* 2.为什么?官方提供的方法,只要导入相关依赖,name就必须通过ClassPathXmlApplicationContext,获取上下文
* 3.ApplicationContext源码
*/
//1.获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.通过getBean()方法,获取对象实例
User user = (User) context.getBean("user");
//3.多元素遍历,创建集合
List<Object> list = new ArrayList<Object>();
//4.通过获取到的对象实例 .方法,获取我们容器中所赋予的value
list.add(user.getId());
list.add(user.getUsername());
list.add(user.getPassword());
//5.遍历输出
for (Object users : list) {
System.out.println(users);
}
}
/**
* @Description 测试多个对象及方法
* @Param
* @return void
*/
@Test
public void test1() {
//1.获取上下文
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
/**
* 2.通过获取到的容器上下文,我们可以获取我们需要的所有东西
* 问题:如果我们需要改变业务,即改变dao实现类,将UserServiceImpl-->UserServiceImpl2怎么办?
* 解决:这就需要我们去容器中修改。
* 容器:容器用于创建对象,但是并不参与编写代码,非入侵;
* 容器脱离程序但跟程序存在特殊联系;修改容器中的dao实现类相当于用户输出,因为容器不会包含程序的任何组成代码,谁都能看得懂,修改也很简单
*/
UserService userServiceImpl = (UserService) context.getBean("UserServiceImpl");
//3.通过实例对象 .方法,调用方法
userServiceImpl.getUser();
}
}