天天看點

Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)

Spring架構學習第一天–SpringIOC(控制反轉)與DI(依賴注入)

  1. Spring Framework的一些學習網站

    ① github 網站—代碼托管 碼雲-代碼托管網站

    Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)
    ② StackOverflow 代碼社群–一些外國代碼高手會解決一些問題(全英文)
    Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)

一、Spring介紹

**	Spring是輕量級的控制反轉(IOC)和 面向切面(AOP)的容器架構。
           

①什麼是輕量級的?

答:項目整合你需要浪費多大的資源叫開銷。浪費資源少的叫輕量級,浪費資源多的叫重量級。
           

②什麼是控制反轉

答:Spring通過一種稱作控制反轉的技術促進了松耦合。

③什麼是反轉

答:把之間需要使用者手動建立的執行個體的過程交給容器去完成。

**

二、需要為spring導入的jar包–以eclipse202003版本為例(現階段)

Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)

三、開始配置Spring(注解開發配置)

①先在src下建立 applicationContext.xml 配置檔案

Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)

在 applicationContext 配置檔案中這樣配置

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:context="http://www.springframework.org/schema/context"
    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
        http://www.springframework.org/schema/context 
        http://www.springframework.org/schema/context/spring-context.xsd
        ">
        <!-- 掃描這個com.hk.spring包下所有的加了注解的bean都放在這個容器中-->
	 <context:component-scan base-package="com.hk.spring"></context:component-scan>
</beans>
           

接着咱們再建立容器有兩種方式我們先來最常用的最常用的 一、 ApplicationContext

//測試類
public class UserTest {

	private ApplicationContext cont;
	@Before
	public void init() {
	//建立容器--加載你的配置類
		cont = new ClassPathXmlApplicationContext("applicationContext.xml");
	}
	
	@Test
	public void ceshi() {
		UserServlet userservlet = (UserServlet) cont.getBean("servlet");
		userservlet.find();
	}
           

擷取bean有2種方式

第一種

第二種

第二種建立容器的方式(不常用)Resource

public class UserTest {

	private BeanFactory factory;
	@Before
	public void init() {
	//建立容器--加載你的配置類
		Resource res = new FileSystemResource(new File("src/applicationContext.xml"));
		 factory = new XmlBeanFactory(resource);
		
	}
	
	@Test
	public void ceshi() {
		Studnet stu = (Studnet) factory.getBean("stu");
		stu.hello();
	}
           

四、這兩種建立容器的差別

Spirng使用ApplicationContext定義容器對象是在容器-預設懶加載為false時,初始化時就建立好bean的執行個體!!

Spring使用beanFactory建立容器生成bean執行個體是在調用getBean的時候才會去執行個體化bean!!

五、四種建立bean的方式

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	 xmlns:p="http://www.springframework.org/schema/p"
	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">
	
	<!-- 1最常用的建立對象的方式  -->
	<bean id="user" class="com.hk.spring.entity.User"></bean>

	<!-- 2建立對象,使用靜态工廠方法執行個體化(簡單的工廠模式) -->
	<bean id="apple" class="com.hk.spring.file.BeanFactory" factory-method="getBean"></bean>
	
	<!-- 3建立對象 使用執行個體工廠方法執行個體化(工廠方法模式)-->
	<bean id="apple2" factory-bean="bf2" factory-method="getBean"></bean>
	<bean id="bf2" class="com.hk.spring.file.BeanFactory2"></bean>


	<!-- 4set指派的方式特殊字元處理  -->
	<bean id="user2" class="com.hk.spring.entity.User">
		<property name="name" >
			<value> <![CDATA["《賀凱》"]]> </value>
		</property>
		<property name="sex" value="24"></property>
	</bean>
	
	<!-- 5簡寫操作 -->
	<bean id="user5" class="com.hk.spring.entity.User" p:name="賀" p:sex="20">	
	</bean>
	
	<!-- 6數組與list指派 -->
	<bean id="stu" class="com.hk.spring.entity.Student" p:sname="凱" p:age="1"></bean>
	
	<bean id="user6" class="com.hk.spring.entity.User" p:name="賀" p:sex="20">	
		<property name="hobby">
			<list>
				<value>1</value>
				<value>賀</value>
			</list>
		</property>
		<property name="studen" ref="stu"></property>
		<!-- map指派 -->
		<property name="Studnets">
			<map>
				<entry key="123" value="321"></entry>
				<entry key="1凱" value="1ppijh和"></entry>
			</map>
		</property>
	</bean>

</beans>
           

六、4個注解來标記這個bean為spring容器的一個bean它們都繼承了component

Spring架構學習第一天--SpringIOC(控制反轉)與DI(依賴注入)