文章目錄
前言
是一個輕量級的框架
一、體系結構介紹
四大框架:,,JDBC,
先來學:
問題:能不能做到不修改任何代碼 實現用戶名查詢切換
解決方案:
1.把類名寫到一個配置文件
2.通過代碼去讀配置文件,反射可以動態的創建對象(提供類名)
框架(控制反轉IOC)幫我們完成了1+2
二、使用框架 1.導包
導入目錄:
導入地點:
導入代碼:
<!-- SpringIOC依賴包-->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.22</version>
</dependency>
學習1:控制反轉(IOC):
現在要創建一個配置文件
’
在創建的xml文件中寫入如下代碼:
<!-- 配置類名 Spring創建對象-->
<bean class="org.example.dao.impl.UserDaoImpl" id="userDao" scope="prototype">
</bean>
在app文件中,寫入如下代碼:
// UserDao userDao = new UserDaoImpl();
// 讀配置文件,并把配置文件中配的讀到的類名創建該對象
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
// 里氏替換原則
// 單例模式(創建同一個對象)
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
System.out.println(userDao.findUser());
學習筆記:
控制反轉IOC:
在使用框架后類實現放在頭文件,對象的實例不再由調用者創建類實現放在頭文件,而是由容器來創建,容器會負責控制程序之間的關系,而不是由調用者的代碼直接控制。這樣,控制權由應用代碼轉移到了容器,控制權發生了反轉,這就是控制反轉。
作用域:
學習2:依賴注入(DI):
例一:
在app中,輸入以下代碼:
// 一般不直接調用dao -> 通過service來調用dao
UserDao userDao = (UserDao) applicationContext.getBean("userDao");
UserService userService = (UserService) applicationContext.getBean("userService");
// userService.setUserDao(userDao);
System.out.println(userService.findUser());
而在配置文件中,輸入一下代碼:
<bean class="org.example.service.UserService" id="userService">
<!-- 對象間的關聯關系-->
<property name="userDao" ref="userDao"/>
</bean>
其中的ref標簽通過其中的值找到,并替代,這樣,就不需要在app類中了
還有另外一種方法:
<bean class="org.example.service.UserService" id="userService" autowire="byName">
<!-- 對象間的關聯關系-->
<!-- <property name="userDao" ref="userDao"/>-->
</bean>
使用=""標簽來以id來匹配(自動裝配)
例二:
控制文件:
<bean class="org.example.Person" id="person">
<property name="age" value="20"/>
<property name="name" value="testname"/>
</bean>
類:
package org.example;
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
app中:
Person person = (Person) applicationContext.getBean("person");
System.out.println(person.getAge());
System.out.println(person.getName());
學習筆記:
依賴注入(DI):
從容器角度來看,容器負責將被依賴的對象復制給調用者的成員變量,相當于為調用者注入它所依賴的實例,這就是的依賴注入。
自動裝配:
學習3:注解:
類中:
package org.example;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
//Component Spring 容器創建對象
//注解默認不生效 -> 開啟注解
@Component
public class Person {
@Value("20")
private String name;
@Value("TestName")
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;`在這里插入代碼片`
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
配置文件中(開啟注解):
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<context:component-scan base-package="org.example"/>
app中:
ApplicationContext applicationContext =
new ClassPathXmlApplicationContext("applicationContext.xml");
Person person = (Person) applicationContext.getBean("person");
System.out.println(person.getAge());
System.out.println(person.getName());