目錄:
<span id="diceng">Spring的ioc底層原理 (降低類之間的耦合度)</span>:
//偽代碼
//需要實例化的類
public class UserService{
}
public class UserServlet{
//得到UserService的對象
//原始的做法:new 對象(); 來創(chuàng)建
//經(jīng)過spring后
UserFactory.getService(); //(下面兩步的代碼調(diào)用的)
}
第一步:創(chuàng)建xml配置文件袒餐,配置要創(chuàng)建的對象類
<bean id="userService" class="cn.blinkit.UserService"/>
第二步:創(chuàng)建工廠類飞蛹,使用dom4j解析配置文件+反射
public class Factory {
//返回UserService對象的方法
public static UserService getService() {
//1.使用dom4j來解析xml文件
//根據(jù)id值userService谤狡,得到id值對應(yīng)的class屬性值
String classValue = "class屬性值";
//2.使用反射來創(chuàng)建類對象
Class clazz = Class.forName(classValue);
//創(chuàng)建類的對象
UserService service = clazz.newInstance();
return service;
}
}
<span id="rumen">Spring入門案例</span>
-
第一步:導(dǎo)入jar包
做spring最基本的功能時卧檐,導(dǎo)入核心的4個jar包
spring-bens-4.x.x.RELEASE.jar
spring-core-4.x.x.RELEASE.jar
spring-context-4.x.x.RELEASE.jar
spring-expression-4.x.x.RELEASE.jar
(SpEL)
同時還需要導(dǎo)入支持日志輸出的jar包
`commons-logging-1.2.jar
log4j-1.2.x.jar
2.創(chuàng)建類墓懂,在類里面創(chuàng)建方法
public class User {
//spring默認(rèn)創(chuàng)建對象的時候會調(diào)用無參的構(gòu)造方法,如果沒有無參的構(gòu)造霉囚,會出現(xiàn)異常
public User() {
}
public void add() {
System.out.println("Hello World...");
}
}
3.創(chuàng)建spring配置文件捕仔,配置創(chuàng)建類
1)spring核心配置文件名稱和位置不是固定的,建議放在src下面盈罐,官方建議applicationContext.xml
2)引入schema約束和配置對象創(chuàng)建
在壓縮包:spring-framework-4.3.1.RELEASE\docs\spring-framework-reference\html
<?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 http://www.springframework.org/schema/beans/spring-beans.xsd">
<!--ioc入門 配置對象創(chuàng)建-->
<bean id="user" class="cn.blinkit.User"></bean>
</beans>
4.創(chuàng)建測試
public class UserTest {
@Test
public void testUser() {
//1.加載spring配置文件榜跌,根據(jù)創(chuàng)建對象
ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");
//2.得到配置創(chuàng)建的對象
User user = (User)context.getBean("user");
System.out.println(user);
user.add();
}
}
<span id="beanGuanli">Spring的bean管理(xml方式)</span>
bean實例化的方式
1.在spring里面通過配置文件創(chuàng)建對象
2.bean實例化三種方式實現(xiàn)
第一種:使用類的 無參數(shù)構(gòu)造方法 創(chuàng)建(重點)
參照上面的 Spring入門案例
注:類里面如果沒有無參數(shù)的構(gòu)造方法,會出現(xiàn)異常
第二種:使用靜態(tài)工廠創(chuàng)建 (開發(fā)中一般不用)
(1)創(chuàng)建靜態(tài)的方法盅粪,返回類的對象
Bean:
public class Bean {
public Bean() {
}
public void add() {
System.out.println("bean的add方法....");
}
}
BeanFactory:
public class BeanFactory {
//靜態(tài)的方法钓葫,返回bean的對象
public static Bean getBean() {
return new Bean();
}
}
xml配置:
<!--demo2 使用靜態(tài)工廠創(chuàng)建對象-->
<bean id="bean" class="cn.blinkit.demo2.BeanFactory" factory-method="getBean"></bean>
測試代碼
public class BeanTest {
@Test
public void beanTest() {
//1.加載spring配置文件,根據(jù)創(chuàng)建對象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.得到配置創(chuàng)建的對象
Bean bean = (Bean)context.getBean("bean");
System.out.println(bean);
bean.add();
}
}
第三種:使用實例工廠創(chuàng)建 (開發(fā)中一般不用)
(2)創(chuàng)建不是靜態(tài)的方法
Bean和上面的一樣
BeanFactory:
public class BeanFactory2 {
//普通方法票顾,返回Bean對象
public Bean getBean() {
return new Bean();
}
}
xml配置
<!--demo2 使用實例工廠創(chuàng)建對象-->
<!-- 創(chuàng)建工廠對象 -->
<bean id="BeanFactory2" class="cn.blinkit.demo2.BeanFactory2"></bean>
<bean id="bean2" factory-bean="BeanFactory2" factory-method="getBean"></bean>
測試:
public class BeanTest2 {
@Test
public void beanTest2() {
//1.加載spring配置文件础浮,根據(jù)創(chuàng)建對象
ApplicationContext context = new ClassPathXmlApplicationContext("spring-config.xml");
//2.得到配置創(chuàng)建的對象
Bean bean = (Bean)context.getBean("bean2");
System.out.println(bean);
bean.add();
}
}
<span id="beanShuXing">Bean標(biāo)簽常用屬性</span>
1. id屬性
- 起的名字,id屬性值名稱任意命名
- id屬性值不能包含特殊符號
- 根據(jù)id得到配置對象
2. class屬性
- 創(chuàng)建對象所在類的全路徑
3. name屬性
- 功能和id屬性一樣奠骄,id屬性值不能包含特殊符號豆同,但是在name值里面可以包含特殊符號
4. scope屬性
-
singleton: spring默認(rèn)的,單例的
- scope="singleton"
-
prototype:多例的
- scope="prototype"
- request:創(chuàng)建對象把對象放到request域里面
- WEB項目中戚揭,Spring創(chuàng)建一個Bean的對象诱告,將對象存入到request域中。
- session:創(chuàng)建對象把對象放到session域里面
- WEB項目中民晒,Spring創(chuàng)建一個Bean的對象精居,將對象存入到session域中。
- globalSession:全局session(單點登錄) 創(chuàng)建對象把對象放到globalSession域里面
- WEB項目中潜必,應(yīng)用在Porlet環(huán)境靴姿,如果沒有Porlet環(huán)境那么globalSession相當(dāng)于session。