1 spring是一站式框架,在javaee的三層結構中,每一層都提供不提並的解決技術
web層:springMVC
service層:spring的ioc
dao層:spring的jdbcTemplate
2 javaee爲避免兩個類之間出現耦合,則把對象的創建交給spring進行管理,spring的ioc操作:(1)ioc的配置文件方式;(2)ioc註解方式
3 ioc的底層原理使用技術(1)xml配置文件 (2)dom4j解決xml (3)工廠設計模式 (4)反射
4 圖解分析ioc實現原理
5 ioc入門案例
第一步 導入jar包 (1)解壓資料zip文件 Jar特點:都有三個jar包 (2)做spring最基本功能時候,導入四個核心的jar包就可以了 (3)導入支持日誌輸出的jar包 第二步 創建類,在類裏面創建方法
第三步 創建spring配置文件,配置創建類 (1)spring核心配置文件名稱和位置不是固定的 - 建議放到src下面,官方建議applicationContext.xml (2)引入schema約束
(3)配置對象創建
第四步 寫代碼測試對象創建 (1)這段代碼在測試中使用 |
6 bean注入屬性和注入屬性對象
(1)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"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- ioc入門 -->
<!-- <bean id="user" class="cn.hz.bean.User"></bean> -->
<!-- 使用set注入屬性值,不能使用有參構造,默認就是空參構造 -->
<bean id="user" class="cn.hz.bean.User">
<property name="name" value="魏"></property>
</bean>
<!-- 使用set注入對象 -->
<bean id="userdao" class="cn.hz.dao.UserDao"></bean>
<bean id="userservice" class="cn.hz.service.UserService">
<property name="userDao" ref="userdao"></property>
</bean>
</beans>
(2)編寫domain對象
package cn.hz.bean;
public class User {
//默認是空參構造
public String name;
public String password;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public void eat() {
System.out.println("user eat....");
}
@Override
public String toString() {
return "User [name=" + name + ", password=" + password + "]";
}
}
(3) 編寫測試類
package cn.hz.test;
import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.hz.bean.User;
public class TestBeanIoc {
@Test
public void testBean() {
ApplicationContext context = new ClassPathXmlApplicationContext("application.xml");
User user = (User) context.getBean("user");
System.out.println(user);
user.eat();
}
}
(4) 插入對象屬性實例: service中依賴dao. 則現在配置文件中配置,注意對象的配置使用的是ref屬性, 只有字符串的配置使用的是value屬性
UserDao:
package cn.hz.dao;
public class UserDao {
public void query() {
System.out.println("userDao query....");
}
}
UserService:
package cn.hz.service;
import cn.hz.dao.UserDao;
public class UserService {
//service中依賴userdao
private UserDao userDao;
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void query() {
userDao.query();
}
}
7 注入複雜數據類型
1 數組 2 list集合 3 map集合 4 properties類型 <!-- 注入複雜類型屬性值 --> <bean id="person" class="cn.itcast.property.Person"> <!-- 數組 --> <property name="arrs"> <list> <value>小王</value> <value>小馬</value> <value>小宋</value> </list> </property>
<!-- list --> <property name="list"> <list> <value>小奧</value> <value>小金</value> <value>小普</value> </list> </property>
<!-- map --> <property name="map"> <map> <entry key="aa" value="lucy"></entry> <entry key="bb" value="mary"></entry> <entry key="cc" value="tom"></entry> </map> </property>
<!-- properties --> <property name="properties"> <props> <prop key="driverclass">com.mysql.jdbc.Driver</prop> <prop key="username">root</prop> </props> </property> </bean> |
8 Spring整合web項目原理
1 加載spring核心配置文件, (1)new對象,功能可以實現,效率很低
2 實現思想:把加載配置文件和創建對象過程,在服務器啓動時候完成
3 實現原理 (1)ServletContext對象 (2)監聽器
(3)具體使用: - 在服務器啓動時候,爲每個項目創建一個ServletContext對象 - 在ServletContext對象創建時候,使用監聽器可以具體到ServletContext對象在什麼時候創建 - 使用監聽器監聽到ServletContext對象創建時候, -- 加載spring配置文件,把配置文件配置對象創建 -- 把創建出來的對象放到ServletContext域對象裏面(setAttribute方法) - 獲取對象時候,到ServletContext域得到 (getAttribute方法) |
github:https://github.com/2402zmybie/Spring_ioc_01