1. 程式人生 > 其它 >Spring學習筆記-配置檔案

Spring學習筆記-配置檔案

Spring入門

1.匯入座標(pom.xml)

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>5.3.15</version>
    </dependency>

2.建立介面類

package org.example.dao;

public interface UserDao {
    void save();
}

3.介面實現

package org.example.Impl;

import org.example.dao.UserDao;

public class UserDaoImpl implements UserDao {
    @Override
    public void save() {
        System.out.println("savr runing...");
    }
}

4.建立applicationContext.xml(resouces檔案下)配置Bean

<bean id="userDao" class="org.example.Impl.UserDaoImpl"></bean>

5.建立applicationContext物件getBean

public class SpringTest {
    @Test
    public void test1(){
        ApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
        UserDao userDao = (UserDao) app.getBean("userDao");
        userDao.save();
    }
        
}

Spring配置檔案

Bean標籤基本配置

基本屬性

  1. id:Bean例項在Spring容器中的唯一標識
  2. class:Bean的全限定名稱
  3. scope:物件作用範圍,取值如下:
  • single:預設值,單例的,當Spring核心被載入時,例項化配置的Bean例項

  • prototype:多例的,當呼叫getBean()方法時例項化Bean

  • request:WEB專案中,Spring建立一個Bean物件,將物件存到request域中

  • session:WEB專案中,Spring建立一個Bean物件,將物件存到session域中

  • global session:WEB專案中,應用在portlet中,如果沒有portlet環境,那麼global Session相當於session

Bean生命週期配置

  1. init-method:指定類中的初始化方法名稱

  2. destroy-method:指定類中銷燬方法名稱

<bean id="userDao" class="org.example.Impl.UserDaoImpl" scope="singleton" init-method="init" destroy-method="destory"></bean>
public class UserDaoImpl implements UserDao {

    public UserDaoImpl() {
        System.out.println("物件建立...");
    }

    @Override
    public void save() {
        System.out.println("savr runing...");
        }

    public void init(){
        System.out.println("初始化方法....");
        }

    public void destory(){
        System.out.println("銷燬方法....");
    }
}

Bean例項化的三種方式

無參構造方法例項化
<bean id="userDao" class="org.example.Impl.UserDaoImpl"></bean>
public class UserDaoImpl implements UserDao {

    public UserDaoImpl() {}
}
工廠靜態方法例項化
<bean id="userDao" class="org.example.factory.StaticFactory" factory-method="getUserDao"></bean>
public class StaticFactory {
    public static UserDao getUserDao(){
        return new UserDaoImpl();
    }
}
工廠例項方法例項化
<bean id="factory" class="org.example.factory.DynameicFactory" ></bean>
<bean id="userDao" factory-bean="factory" factory-method="getUserDao"></bean>
public class DynameicFactory {
    public UserDao getUserDao(){
        return new UserDaoImpl();
    }
}

物件引用依賴注入方式

構造方法
<bean id="userDao" class="org.example.Impl.UserDaoImpl"></bean>
    <bean id="UserService" class="org.example.Impl.UserServiceImpl">
        <constructor-arg name="userDao" ref="userDao"></constructor-arg>
    </bean>
public class UserServiceImpl implements UserService {

    private UserDao userDao;
    //構造方法注入
    public UserServiceImpl(UserDao userDao){
        this.userDao = userDao;
    }
}
set()方法
<bean id="userDao" class="org.example.Impl.UserDaoImpl"></bean>
    <bean id="UserService" class="org.example.Impl.UserServiceImpl">
        <property name="userDao" ref="userDao"></property> 
<!--name:注入Bean的id,ref:呼叫方法(setUserDao),去set首字母小寫-->
    </bean>
public class UserServiceImpl implements UserService {

    private UserDao userDao;
    public void setUserDao(UserDao userDao){
        this.userDao = userDao;
    }

    @Override
    public void save() {
        userDao.save();
    }
}
p名稱空間注入(本質set()方法注入,更方便)
<beans xmlns:p="http://www.springframework.org/schema/p">
<!--引入p名稱空間-->

<bean id="userDao" class="org.example.Impl.UserDaoImpl"></bean>
<bean id="UserService" class="org.example.Impl.UserServiceImpl" p:userDao-ref="userDao"></bean>

依賴注入資料型別

普通資料型別
<bean id="userDao" class="org.example.Impl.UserDaoImpl">
        <property name="username" value="zhangsan"></property>
        <property name="age" value="18"></property>
    </bean>
public class UserDaoImpl implements UserDao {

    private String username;
    private Integer age;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setAge(Integer age) {
        this.age = age;
    }
}
集合資料型別
    <bean name="user1" class="org.example.domain.User">
        <property name="name" value="Tom"></property>
        <property name="addr" value="sh"></property>
    </bean>
    <bean name="user2" class="org.example.domain.User">
        <property name="name" value="Sum"></property>
        <property name="addr" value="bj"></property>
    </bean>
    
    <bean id="userDao" class="org.example.Impl.UserDaoImpl">
        <property name="strList">
            <list>
                <value>aaa</value>
                <value>abb</value>
                <value>abc</value>
            </list>
        </property>
    
        <property name="userMap">
            <map>
                <entry key="u1" value-ref="user1"></entry>
                <entry key="u2" value-ref="user2"></entry>
            </map>
        </property>
    
        <property name="properties">
            <props>
                <prop key="p1">111</prop>
                <prop key="p2">122</prop>
                <prop key="p3">123</prop>
            </props>
        </property>
        <property name="age" value="18"></property>
    </bean>
public class UserDaoImpl implements UserDao {

    private List<String> strList;
    private Map<String, User> userMap;
    private Properties properties;

    public void setStrList(List<String> strList) {
        this.strList = strList;
    }

    public void setUserMap(Map<String, User> userMap) {
        this.userMap = userMap;
    }

    public void setProperties(Properties properties) {
        this.properties = properties;
    }
}

Spring配置檔案

<import resource="applicationContext-***.xml"/>