輕量級的 DI / IoC 和 AOP 容器的開源框架php
Controller -> Service -> Dao
UserControoler
private UserService userService = new UserService();
複製代碼
使用後:由spring建立,自動導入web
能夠解耦核⼼業務和邊緣業務的關係redis
<dependencies>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-context -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-core -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework/spring-beans -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>5.2.5.RELEASE</version>
</dependency>
</dependencies>
複製代碼
id是別名,property是給實體類的屬性注入值spring
<?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="video" class="cn.junko.domain.Video">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
</beans>
複製代碼
public class app {
public static void main(String[] args) {
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("applicationContext.xml");
Video video = (Video) applicationContext.getBean("video");
System.out.println(video.getName());
}
}
複製代碼
打印一下,可以成功獲得對象和數據編程
這裏講一下基礎的xml配置標籤緩存
ApplicationContext是spring 的核心接口,應用程序上下文,只要是spring對象被掃描以後,就能夠在這裏進行管理獲取,而ClassPathXmlApplicationContext就可以在這個類路徑下面去找xml,而後根據bean的id和name去取對應容器裏面的對象。包括後續哪裏須要注入的時候就能注入進去,不須要手工去new,只須要get一下session
IOC Inverse of Control(控制反轉)是⼀種設計思想 將本來在程序中⼿動建立對象的流 程,交由Spring框架來管理 核⼼:把建立對象的控制權反轉給Spring框架,對象的⽣命週期由 Spring統⼀管理,即mybatis
DI Dependency Injection ,依賴注⼊ IOC容器在運⾏期間,動態地將對象某種依賴關係注⼊到對象之中,⽐如視頻訂單對象,依賴⽤視 頻對象 建立另外一個實體類,在裏面加入Video的對象,而後編寫xml文件app
<bean id="video" class="cn.junko.domain.Video">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
<bean id="videoOrder" class="cn.junko.domain.VideoOrder">
<property name="id" value="1"></property>
<property name="outTrade" value="123123123"></property>
<property name="video" ref="video"></property>
</bean>
複製代碼
VideoOrder videoOrder= (VideoOrder) applicationContext.getBean("videoOrder");
System.out.println(videoOrder.getId());
System.out.println(videoOrder.getVideo().getName());
複製代碼
在bean標籤中,可讓咱們告訴spring何時產生一個新的bean,仍是用單個bean,這就是scope的做用
當使用scope=singleton建立對象,地址是同樣的
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
</bean>
複製代碼
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value="123123"></constructor-arg>
</bean>
複製代碼
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<constructor-arg name="id" value="2"></constructor-arg>
<constructor-arg name="name" value="123123"></constructor-arg>
</bean>
<bean id="videoOrder" class="cn.junko.domain.VideoOrder">
<property name="id" value="1"></property>
<property name="outTrade" value="123123123"></property>
<property name="video" ref="video"></property>
</bean>
複製代碼
注意: 類的構造函數重寫的時候,⼀定要保留空構造函數!!!
在實體類中添加list和map並生成對應的方法
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="1"></property>
<property name="name" value="jjbq"></property>
<property name="list1">
<list>
<value>1</value>
<value>2</value>
<value>3</value>
</list>
</property>
<property name="map1">
<map>
<entry key="1" value="1111111"></entry>
<entry key="2" value="2222222"></entry>
<entry key="3" value="3333333"></entry>
</map>
</property>
</bean>
複製代碼
bean繼承:兩個類之間⼤多數的屬性都相同,避免重複配置,經過bean標籤的parent屬性重⽤已 有的Bean元素的配置信息 繼承指的是配置信息的復⽤,和Java類的繼承沒有關係
<bean id="video" class="cn.junko.domain.Video" scope="singleton" parent="video">
<property name="name" value="這是video2"></property>
</bean>
複製代碼
若是類A是做爲類B的屬性, 想要類A⽐類B先實例化,設置兩個Bean的依賴關係
<bean id="video" class="cn.junko.domain.Video" scope="singleton">
<property name="id" value="9"/>
<property name="title" value="spring1" />
</bean>
<!--設置兩個bean的關係,video要先於videoOrder實例化-->
<bean id="videoOrder" class="cn.junko.domain.VideoOrder" dependson="video">
<property name="id" value="8" />
<property name="outTradeNo" value="777777"/>
<property name="video" ref="video"/>
</bean>
複製代碼