Spring-注入方式

守望精靈發表於2020-10-19

Spring設計理念

面向Bean的程式設計  框架的特點:把程式碼轉化為配置檔案

Spring兩大核心技術:AOPIOC

Spring的優點

  •     低侵入式設計
  •     獨立於各種應用伺服器
  •     依賴注入特性將元件關係透明化,降低了耦合度
  •     面向切面程式設計特新允許將通用任務進行集中式處理
  •     與第三方框架的良好整合

注入方式

set方法注入

Student類必須有set方法和無參構造方法

   <bean id="s" class="com.pojo.Student">
        <property name="sutName" value="cuihua"></property>
        <property name="age" value="28"></property>
    </bean>
public static void main(String[] args){
	ApplicationContext ctx = new ClassPathXmlApplication("ApplicationContext.xml");
	Student student = ctx.getBean(Student.class);
	//如果出現了兩個Student類的話,只能根據bean的id來獲取
	Student student = ctx.getBean("s1");
}

構造方法注入

<bean id="s" class="com.pojo.Student">
    <property name="sutName" value="cuihua"></property>
    <property name="age" value="28"></property>
</bean>

<bean id="userDao" class="dao.impl.userDaoImpl"/>
<bean id="userService" class="service.impl.UserServiceImpl">
    <constructor-arg><ref bean="userDao"/></constructor-arg>
    <constructor-arg value="cuihua"></constructor-arg>
    <constructor-arg value="18"></constructor-arg>
</bean>

<bean id="s2" class="com.pojo.Student">
    <constructor-arg value='cuihua' index="0"></constructor-arg>
    <constructor-arg value='98' index="1"></constructor-arg>
    <constructor-arg value='18' index="2"></constructor-arg>
</bean>
   
  •  一個<constructor-args>元素表示構造方法的一個引數,且使用時不區分順序
  • 通過<constructor-args>元素的index屬性可以指定該引數的位置索引,位置從0開始
  • <constructor-args>還提供了type屬性用來指定引數的型別,避免字串和基本資料型別的 混淆
設定注入構造注入
通過setter訪問器實現通過構造方法實現
靈活性好,但setter方法數量較多靈活性差,僅靠過載限制太多
時效性差時效性好
通過無參構造例項化通過匹配的構造方法例項化,但建議保留無參構造

特殊符號的處理:

<bean id="p" class="com.pojo.Person">
    <constructor-arg>
        <value><![CDATA[&&打算]]></value>
    </constructor-arg>
</bean>

需要把value提成是子標籤,然後使用<![CDATA[]]>把特殊字元包括起來

 p標籤

<bean id="s2" class="com.pojo.Student" p:stuName="aa" p:age="18"></bean>

引入外部bean

<bean id="car" class="com.pojo.Car"  p:brand="BMW" p:price="400000" p:speed="260"></bean>
<bean id="s" class="com.pojo.Student">
    <!--set注入-->
    <property name="stuName" value="cc"></property>
    <property name="age">
        <value>20</value>
    </property>
    <property name="car" ref="car"></property>
</bean>

內部bean使用得情況比較少

使用註解實現bean的裝配

<!--自動掃描使用註解的包-->
<context:component-scan base-package="com.pojo"></context:component-scan>
@Component
public class Student{
	public void study(){
		System.out.println("學生正在學習");
	}
}

props注入

public class DataSource{
	private Properties properties;
}//省略setter和getter方法
<bean id="datasource" class="com.pojo.DataSource">
    <property name="properties">
        <props>
            <prop key="driver">com.mysql.jdbc.Driver</prop>
            <prop key="url">jdbc:mysql://localhost:3306/stu</prop>
            <prop key="username">root</prop>
            <prop key="password">123456</prop>
        </props>
    </property>

</bean>

 

相關文章