1.spring的簡介
2.spring優點
3.spring的架構體系
4.Core Container(核心容器)
ApplicationContext.xml中配置Bean
<bean id="userInterfaceImpl" class="com.youlin.spring.demo1.UserInterfaceImpl">
<property name="username" value="張三"></property>
</bean>
測試類中進行獲取 @Test
public void getUser() throws Exception {
//獲取容器
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserInterface bean = (UserInterface) context.getBean("userInterfaceImpl");
bean.sayHello();
}
5.spring的第一大特性IOC
1.容器創建的三種方式
/**
* 容器創建的第一種方式,也是最常用的一種方式
* 使用配置文件的相對路徑
* spring 入門案例
* @throws Exception
*/
@Test
public void getUser() throws Exception {
//獲取容器
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserInterface bean = (UserInterface) context.getBean("userInterfaceImpl");
bean.sayHello();
}
容器創建的第二種方式 /**
* 容器創建的第二種方式
* 使用配置文件的路徑是絕對路徑
*/
@Test
public void getFileSystemContainer() throws Exception {
ApplicationContext context = new FileSystemXmlApplicationContext("D:\\workspace01\\springDay01\\src\\main\\resources\\ApplicationContext.xml");
UserInterface bean = (UserInterface) context.getBean("userInterfaceImpl");
bean.sayHello();
}
第三種方式: /**
* 容器創建的第三種方式,已經過時了,不在使用
* 它是一種懶加載形式
* bean已經定義了,不用到的時候是不加載的,使用的時候纔會加載
* 上面兩種只管創建,不管你用不用
* @throws Exception
*/
@Test
public void getXmlContainer() throws Exception {
Resource resource = new ClassPathResource("ApplicationContext.xml");
XmlBeanFactory beanFactory = new XmlBeanFactory(resource );
UserInterface bean = (UserInterface) beanFactory.getBean("userInterfaceImpl");
bean.sayHello();
}
2.加載對象的三種方式
package com.youlin.spring.demo2;
public class UserBean2Factory {
public static UserBean2 getUserBean2() {
return new UserBean2();
}
}
<!-- 通過靜態工廠來創建對象 -->
<bean id="userBean2Factory" class="com.youlin.spring.demo2.UserBean2Factory" factory-method="getUserBean2"></bean>
/**
* 第二種創建對象的方式:通過靜態工廠來創建對象
*/
@Test
public void getUserBean2() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserBean2 bean = (UserBean2) context.getBean("userBean2Factory");
bean.userBean2SayHello();
}
package com.youlin.spring.demo2;
public class UserBean3Factory {
public UserBean3 getUserBean3() {
return new UserBean3();
}
}
配置 <!-- 通過實例工廠來創建對象 -->
<bean id="userBean3Factory" class="com.youlin.spring.demo2.UserBean3Factory"></bean>
<bean id="userBean3" class="com.youlin.spring.demo2.UserBean3" factory-bean="userBean3Factory" factory-method="getUserBean3"></bean>
獲取 /**
* 第三種創建對象的方式,通過實例工廠來創建對象
* 可以在創建對象之前,加塞一些自己其他的邏輯,在實例工廠內加塞
* @throws Exception
*/
@Test
public void getUserBean3() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
UserBean3 bean = (UserBean3) context.getBean("userBean3");
bean.sayHello();
}
3.bean的作用域及作用範圍以及生命週期
<!-- bean的作用域與作用範圍 -->
<bean id="orders" class="com.youlin.spring.demo3.Orders" scope="singleton" init-method="initMethod" destroy-method="destroyMethod"></bean>
/**
* 作用域與作用範圍
* @throws Exception
*/
@Test
public void getOrders() throws Exception {
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("ApplicationContext.xml");
Orders bean = (Orders) context.getBean("orders");
Orders bean2 = (Orders) context.getBean("orders");
System.out.println(bean.toString());
System.out.println(bean2.toString());
context.close();
}
6.Spring的第二大特性 DI Dependency Injection 依賴注入
<!-- 通過構造器來爲屬性賦值 -->
<bean id="jerry" class="com.youlin.spring.demo4.Jerry">
<!-- 通過constructor-arg來爲我們的屬性賦值
name 指定哪個屬性的名稱
-->
<constructor-arg name="name" value="jerry"></constructor-arg>
<constructor-arg name="sex" value="1"></constructor-arg>
<constructor-arg name="color" value="brown"></constructor-arg>
</bean>
<!-- 通過索引來爲屬性賦值 -->
<bean id="jerry" class="com.youlin.spring.demo4.Jerry">
<constructor-arg index="0" value="jerry2"></constructor-arg>
<constructor-arg index="1" value="0"></constructor-arg>
<constructor-arg index="2" value="黑白色"></constructor-arg>
</bean>
通過P名稱空間和C名稱空間賦值 <!-- 通過P名稱空間來爲屬性賦值 -->
<bean id="tom" class="com.youlin.spring.demo4.Tom" p:age="10" p:tomName="tom" ></bean>
<!-- 通過C名稱空間來爲構造器的屬性注入 -->
<bean id="jerry4" class="com.youlin.spring.demo4.Jerry" c:color="白色" c:sex="0" c:name="jerry4" ></bean>
<!-- spel表達式 -->
<bean id="user2" class="com.youlin.spring.demo4.User">
<property name="age" value="10"></property>
<property name="username" value="tom"></property>
</bean>
<bean id="tom2" class="com.youlin.spring.demo4.Tom">
<property name="tomAge" value="#{user2.getAge()+20}"></property>
<property name="tomName" value="#{user2.getUsername()+'tomtom'}"></property>
<property name="jerry" value="#{jerry4}"></property>
</bean>